3

次のタイプの入力がありますList<List<String>>

入力例:

[A, A1Name]
[B, B1Name]

BiMapに変換したい

A -> A1Name
B -> B1Name

これを達成するための最良の方法は何ですか:

現在私はやっています:

final BiMap<String, String> myMap = HashBiMap.create();
lines.forEach(
    (tokens) -> {
        myMap.put(tokens.get(0), tokens.get(1));
    }
);
4

1 に答える 1

9

BiMap実装されているため、コレクターMapを使用できます。toMapループの動作を複製するには (重複したキーが値をサイレントにオーバーライドし、重複した値が例外をスローする)、次の操作を実行できます。

BiMap<String,String> m = lines.stream().collect(toMap(
    x->x.get(0), x->x.get(1), (a,b)->b, HashBiMap::create
));

余談ですが、コードをストリームに変換する方法がわからない場合、3 引数collectを使用すると、反復コードをほぼそのまま変換する方法が提供されます。

BiMap<String,String> m = lines.stream().collect(
        HashBiMap::create,
        (bm,t) -> bm.put(t.get(0), t.get(1)),
        BiMap::putAll
);
于 2015-08-12T02:16:04.303 に答える