2017-11-03 2 views
1

foreach를 람다 식으로 변경하고 싶습니다. 나는 그것을 올바르게 만들 었는가?foreach를 람다 식으로 변경하기

Map<String, String> countriesToChooseAsMainCountry = new LinkedHashMap<String, String>(); 

의 Foreach :

for (Country country : project.getCountries()) { 
    countriesToChooseAsMainCountry.put(Long.toString(country.getId()), country.getName()); 
} 

람다 :

project.getCountries() 
     .forEach(country -> countriesToChooseAsMainCountry.put(Long.toString(country.getId()), country.getName())); 

내가 어떻게 든이의 가독성을 향상시킬 수 있습니다, 그것은 올바른 한 경우? 감사.

+5

"Foreach"vs "Lambda"예제는 정확히 동일합니다. 지도를 물건으로 채우는 것입니다. – Mena

+0

질문을 편집하여 이해할 수 있습니까? @Mena가 말했듯이 Foreach와 Lambda 코드는 동일합니다. –

+0

@ 메나 Sry, 내 나쁜, 같은 것을 복사, 그것을 해결했습니다. – cerbin

답변

3

당신은 사용할 수 있습니다 Collectors.toMap 같이

project.getCountries() 
     .stream() 
     .collect(Collectors.toMap(country -> Long.toString(country.getId()), // key 
           Country::getName, //value 
           (a, b) -> b, // function to determine the value in case of same country ids (which is essentially overriding the value) 
           LinkedHashMap::new)); 

그것은 당신의 현재 구현 (요구 사항)와 비록 것은 잘 보인다 forEach의 결정적 행동에서 당신을 방지 할 수 있습니다.

+7

그건 좋은 대안이지만 조금 설명하고 직접 OP의 질문에 대답하지 않습니다. – Mena

+1

안녕하세요 @nullpointer입니다. Upvoted하지만 적어도 왜'(a, b) -> b'에서 'a'대신에'b'를 반환하는지 설명해야한다고 생각합니다. 적어도 병합 함수에 대한 문장. –