我想将流收集到LinkedHashMap<String, Object>
。
我有一个存储在LinkedHashMap<String, Object> resources
中的JSON
资源。然后我通过流式传输此Map的EntrySet
来过滤掉JSON
元素。目前我正在将流的元素收集到常规的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>
.我如何才能实现这一点?
3条答案
按热度按时间eqzww0vc1#
你可以用
Stream
来实现:(x, y) -> y
部分是因为mergeFunction在查找重复键时,它返回找到的第二个键的值。第四部分是mapFactory,它是供应商提供的一个新的空Map,结果将插入其中。iszxjhcz2#
使用
Map.forEach
执行此操作的另一种方法是:如果你可以考虑在
keySet
上迭代:jljoyd4f3#
接受的答案包含与默认答案不同的合并(抛出)。遗憾的是,Java
Collectors
类中不存在三个参数的toMap(keyFunction, valueFunction, mapFactory)
重载。因为我只需要LinkedHashMap
,所以我只是将它作为一个自定义的助手方法,从复制(必要时)该类的内部。行为与两个参数的toMap
相同,除了结果Map是LinkedHashMap
。