私はMap<A, Map<B, C>>
を持っており、Javaストリームを使用してMap<B, List<C>>
を取得したいと考えています。Javaストリーム:内部マップキーでグループ化された値を取得
私は次のようにそれをやろう:私は何を期待
public <A, B, C> Map<B, List<C>> groupsByInnerKey(Map<A, Map<B, C>> input) {
return input.values()
.stream()
.flatMap(it -> it.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey));
}
:
flatMap
は、Map.Entry<B, C>
collect(Collectors.groupingBy(...))
のStream
がMap.Entry<B, C>
に適用され、B
を返している機能を取りいますしたがって、C
の値をList<C>
に収集します。
しかし、それは文字通り、コンパイルされません。
非静的メソッドは、最後の行で
Map.Entry::getKey
で
静的コンテキストから参照することはできません。
誰かが何が間違っているのか、自分が望むことを達成するための正しい方法は何かを説明できますか?
可能な重複:http://stackoverflow.com/questions/29373026/how-to-get-all-values-from-the-inner-maps-of-a-map-using-a-common -key –
@ ShiladittyaChakraborty、実際には、私はこれをする期待された方法がうまくいかない理由について尋ねています。また、タスクは参照した質問とは少し異なります。 – hotkey