我希望使用Java 8s的新功能从Java列表创建键值对并插入到地图中
考虑此列表[1, 2, 3, 4]
我正在寻找2个元组,[1, 2]
和[3, 4]
这是我的代码,我从一个答案复制到类似问题的想法
我哪里错了?没有任何内容添加到地图中。
IntStream.range(1, list.size())
.filter(i -> i + 1 % 2 == 0)
.mapToObj(i -> new AbstractMap.SimpleEntry<>(list.get(i - 1), list.get(i)))
.forEach(entry -> map.put(entry.getKey(), entry.getValue()));
答案 0 :(得分:2)
您已经进入常见的Java 8陷阱:您已经创建了流,描述了您希望如何处理它,但没有触发它进行处理。
mapToObj
来电之后,您应该通过调用方法collect
来触发处理,让我们说List
,然后拨打forEach
。或者直接使用Collectors.toConcurrentMap
:
IntStream.range(1, list.size())
.filter(i -> (i + 1) % 2 == 0)
.mapToObj(i -> new AbstractMap.SimpleEntry<>(list.get(i - 1), list.get(i)))
.collect(Collectors.toConcurrentMap(o -> o.getKey(), o -> o.getValue()))