Java 8 のストリーム API を初めて探しています。マップから要素を削除するフィルターを作成しようとしました。
これは私の地図です:
Map<String, Integer> m = new HashMap<>();
値 <= 0 のエントリを削除したいので、フィルタを適用して新しいマップ (Map<String, Integer>) を取得したいと考えています。
これは私が試してきたことです:
m.entrySet().stream().filter( p -> p.getValue() > 0).collect(Collectors.groupingBy(s -> s.getKey()));
HashMap<String, ArrayList<HashMap$Node>> を取得します。だから、私が探していたものではありません。
私も試しました:
m.entrySet().stream().filter( p -> p.getValue() > 0).collect(Collectors.groupingBy(Map::Entry::getKey, Map::Entry::getValue));
これにより、次のことが発生します。
// Error:(50, 132) java: method reference not expected here
基本的に、新しいマップの値を構築する方法がわかりません。
これはCollectors の javadoc です。彼らは groupingBy の例をいくつか書いていますが、私はそれを機能させることができませんでした。
では、自分の Map を思いどおりに構築するには、 collectをどのように記述すればよいでしょうか?