Java8:从Java列表创建元组

Java8:从Java列表创建元组,java,hashmap,Java,Hashmap,我希望使用Java8s的新特性从Java列表中创建键值对并插入到映射中 考虑一下这个列表[1,2,3,4] 我正在寻找两个元组,[1,2]和[3,4] 这是我的代码,我从一个类似问题的答案中复制了这个想法 我哪里做错了?地图上没有添加任何内容 IntStream.range(1, list.size()) .filter(i -> i + 1 % 2 == 0) .mapToObj(i -> new AbstractMap.SimpleEntry<

我希望使用Java8s的新特性从Java列表中创建键值对并插入到映射中

考虑一下这个列表
[1,2,3,4]

我正在寻找两个元组,
[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()));
IntStream.range(1,list.size())
.filter(i->i+1%2==0)
.mapToObj(i->newAbstractMap.SimpleEntry(list.get(i-1),list.get(i)))
.forEach(entry->map.put(entry.getKey(),entry.getValue());

您已经进入了常见的Java 8陷阱:您已经创建了流,描述了您想要如何处理它,但没有触发它进行处理

调用
mapToObj
后,您应该通过调用方法
collect
触发处理,比如说一个
List
,然后进行
forEach
调用。或者直接使用收集器。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()))
IntStream.range(1,list.size())
.filter(i->(i+1)%2==0)
.mapToObj(i->newAbstractMap.SimpleEntry(list.get(i-1),list.get(i)))
.collect(Collectors.toConcurrentMap(o->o.getKey(),o->o.getValue())

您已经进入了常见的Java 8陷阱:您已经创建了流,描述了您想要如何处理它,但没有触发它进行处理

调用
mapToObj
后,您应该通过调用方法
collect
触发处理,比如说一个
List
,然后进行
forEach
调用。或者直接使用收集器。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()))
IntStream.range(1,list.size())
.filter(i->(i+1)%2==0)
.mapToObj(i->newAbstractMap.SimpleEntry(list.get(i-1),list.get(i)))
.collect(Collectors.toConcurrentMap(o->o.getKey(),o->o.getValue())

我想在过滤器中最好写
(I+1)%2==0
你应该用这个更新你的答案。我相信%首先发生,因此筛选器将过滤掉所有留下空流的项目。在我看来,(I+1)不在括号中是上述原因,据我所知,forEach工作良好,我想在筛选器中最好编写
(I+1)%2==0
,您应该用此更新您的答案。我相信%首先发生,因此过滤器将过滤掉所有留下空流的项目。在我看来,(I+1)不在括号中是上述原因,据我所知,forEach工作正常