簡體   English   中英

將EntrySet流收集到LinkedHashMap

[英]Collect stream of EntrySet to LinkedHashMap

我想將流收集到LinkedHashMap<String, Object>

我有一個存儲在LinkedHashMap<String, Object> resourcesJSON LinkedHashMap<String, Object> resources 然后我通過流式傳輸此地圖的EntrySet來過濾掉JSON元素。 目前我正在將流的元素收集到常規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> 我怎樣才能做到這一點?

你可以用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是因為mergeFunction找到重復鍵時,它返回找到的第二個鍵的值。 第四部分是mapFactory ,供應商提供一個新的空Map,結果將插入其中。

使用Map.forEach執行此操作的另一種方法是:

Map<String, Object> result = new LinkedHashMap<>();
resources.forEach((key, value) -> {
    if (keys.contains(key)) {
        result.put(key, value);
    }
});
result.put("date", "someDate");

如果你可以考慮迭代keySet作為一個選項:

Map<String, Object> result = new LinkedHashMap<>();
resources.keySet().stream()
        .filter(keys::contains)
        .forEach(key -> result.put(key,resources.get(key)));
result.put("date", "someDate");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM