2017-11-03 9 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」と「Lambda」の2つの例はまったく同じです。あなたは物事でマップに値を入力しているだけです。 – Mena

+0

問題を編集して意味が分かりますか? @Menaのように、ForeachとLambdaのコードは同じです。 –

+0

@メーナリー、私の悪い、同じことをコピーし、それを修正しました。 – cerbin

答えて

3

としてあなたはCollectors.toMapを使用することができます:それは罰金だあなたの現在の実装(要件)といえforEachの非決定的な振る舞いを防ぎます

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)); 

+7

これはいい代案ですが、少ししか説明せず、OPの質問に直接答えません。 – Mena

+1

こんにちは@nullpointer。アップビートされましたが、少なくとも '(a、b) - > b'では' a'の代わりに 'b'を返す理由を説明してください。少なくとも1つのマージ関数に関する文章。 –