EntrySet のストリームを LinkedHashMap に収集する 質問する

EntrySet のストリームを LinkedHashMap に収集する 質問する

ストリームを に収集したいですLinkedHashMap<String, Object>

JSONに格納されているリソースがあります。次に、このマップのをストリーミングして要素LinkedHashMap<String, Object> resourcesをフィルターします。現在、ストリームの要素を通常の に収集しています。ただし、この後、マップに他の要素を追加します。これらの要素を挿入順序にする必要があります。JSONEntrySetHashMap

final List<String> keys = Arrays.asList("status", "createdDate");

Map<String, Object> result = resources.entrySet()
        .stream()
        .filter(e -> keys.contains(e.getKey()))
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

result.put("date", "someDate");
return result;

そのため、ストリームを に収集したいと考えていますLinkedHashMap<String, Object>。どうすればこれを実現できますか?

ベストアンサー1

これは次のように実行できますStream:

Map<String, Object> result = resources.entrySet()
            .stream()
            .filter(e -> keys.contains(e.getKey()))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (x, y) -> y, LinkedHashMap::new));

その部分(x, y) -> yマージ関数重複したキーが見つかった場合、見つかった2番目のキーの値を返します。4番目の部分はマップファクトリー結果が挿入される新しい空のマップを提供するサプライヤー。

おすすめ記事