私はのjavaで最もエレガントな方法はstream
とCollectors
を使用することだと思います。あなたがこの方法を達成することができます
:
List<Tuple2<String, String>> list = new ArrayList<>();
list.add(new Tuple2<>("first", "second"));
list.add(new Tuple2<>("third", "four"));
list.add(new Tuple2<>("five", "six"));
list.add(new Tuple2<>("seven", "eight"));
list.add(new Tuple2<>("nine", "ten"));
System.out.println("List of Tuple2s:" + list);
//convert list of tupples to Map with one line
Map<String, String> resultMap = list.stream()
.collect(Collectors.toMap(Tuple2::_1, Tuple2::_2));
System.out.println("Map of Tuples2s: "+resultMap);
出力:
List of Tuple2s:[(first,second), (third,four), (five,six), (seven,eight), (nine,ten)]
Map of Tuples2s: {nine=ten, third=four, seven=eight, five=six, first=second}
しかし、どのような重複キーについて?我々はリストに別の項目を追加するときのように:list.add(new Tuple2<>("first", "ten"));
例外がoccures:スレッドで
例外は、 "メイン" java.lang.IllegalStateException:( java.util.stream.Collectors.lambda $ throwingMerger $ 0 キーを2重複しますjava.util.HashMap.merge(HashMap.java:1253)
でCollectors.java:133) あなたはあなたが行うことができます重複を持つことができるかどうかわからない場合:
Map<String, String> resultMap = list.stream()
.collect(Collectors.toMap(Tuple2::_1, Tuple2::_2,
(x, y) -> {
System.out.println("duplicate key!");
return x;
}));
を入力し、項目を上書きすることは避けてください。Map
出力:
List of Tuple2s:[(first,second), (third,four), (five,six), (seven,eight), (nine,ten), (first,ten)]
duplicate key!
Map of Tuples2s: {nine=ten, third=four, seven=eight, five=six, first=second}
あなたはこのような何かをしたいですか? http://stackoverflow.com/a/33345553/4969370 – Androbin