2017-08-29 12 views
1

私はJava8とStreamを使用していることを学んでいます。私はjava8ストリームを使用して解決しようとしている問題があります。私はMap.value内のすべての一意の整数値()をしたい{0000132861=[6613, 6170, 6206], 0000135932=[6613, 6170, 6206], 0000122989=[6613, 6170, 6206], 0000138372=[3187, 6613, 8167, 6170, 6206], 0000138399=[6613, 6170, 6206]}Java 8:マップの値であるすべてのリストのオブジェクトから<V>を作成する<K, List<V>>

-

は私がタイプMap<String, List<Integer>> accountMap データと地図を持っています。私はaccountUserMap.values().stream().collect(Collectors.toSet())を行うと 私はaccountMap.values()を行うと

[3187, 6613, 8167, 6170, 6206]と同じように私は私が同じデータ型Set<List<Integer>> [[3187, 6613, 8167, 6170, 6206], [6613, 6170, 6206]]しかし、すべての重複リストが廃棄され得るList<List<Integer>> [[6613, 6170, 6206], [6613, 6170, 6206], [6613, 6170, 6206], [3187, 6613, 8167, 6170, 6206], [6613, 6170, 6206]]

を取得します。

私はすべての重複した値をドロップしたいとSet<Integer> [3187, 6613, 8167, 6170, 6206]

は.forEach()を使用して、リストを反復することなく、それを行うための効率的な方法があるはずです取得したいです。

答えて

4

あなたは値のストリーム "フラット化" するflatMapを使用することができますが、代わりに、

map.values().stream() 
    .collect(HashSet::new, Set::addAll, Set::addAll); 
0

使用されることはありませんが、自分自身をストリーム:あなたは3引数collectを使用することができ、また

map.values().stream() 
    .flatMap(List::stream) 
    .collect(toSet()); 

を上のコードでstream()を試してみてください:

stream().flatMap(p -> p.stream()) 

toその次のリストレベルを展開します。

これは、このような文脈でこのanswerが示唆するものです。

関連する問題