ストリームを に収集したいですLinkedHashMap<String, Object>
。
JSON
に格納されているリソースがあります。次に、このマップのをストリーミングして要素LinkedHashMap<String, Object> resources
をフィルターします。現在、ストリームの要素を通常の に収集しています。ただし、この後、マップに他の要素を追加します。これらの要素を挿入順序にする必要があります。JSON
EntrySet
HashMap
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番目の部分はマップファクトリー結果が挿入される新しい空のマップを提供するサプライヤー。