java - 将 EntrySet 的流收集到 LinkedHashMap

标签 java hashmap java-stream linkedhashmap

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

我有一个 JSON存储在 LinkedHashMap<String, Object> resources 中的资源. 然后我过滤掉JSON通过流式传输元素 EntrySet这张 map 的。 目前我正在将流的元素收集到常规 HashMap .但在此之后,我将向 map 添加其他元素。我希望这些元素按插入顺序排列。

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 当找到重复键时,它返回找到的第二个键的值。第四部分是 ma​​pFactory,供应商提供一个新的空 map ,结果将插入其中。

关于java - 将 EntrySet 的流收集到 LinkedHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52975256/

相关文章:

java - 使用 Java 8 流运算符将两级映射列表减少为单个两级映射

java - 用于求和 java 8 float 的自定义收集器实现

java - Blogger - 根据标签检索博客

java - 试图避免并发修改异常

java - 用Java解析文本文件

java - 在 Java 中合并两个 hashMap 对象时如何合并列表

基于 UML 类图的 Java Bank; HashMap 存储的问题

java - 生成一个包含整数 (0, 1, -1, 2, -2, 3, -3, ...) 的无限 Stream<Integer>

java - 更新 hibernate 对象时将数据类型 nvarchar 转换为十进制错误时出错

java - Guice Multibinder 用于具有特定值的注释