2 回答

TA贡献1829条经验 获得超6个赞
您使用的不是最佳方法Stream。请务必将其中的每一步都Stream视为修改现有(或创建新)元素并将其返回到Stream. 最后您会收到final结果,您可以使用其中一种final方法来完成(并实际运行整个流工作)Stream:
List<Integer> listInteger = Arrays.asList(2, 4, 6, 8, 12, 17, 1234);
listInteger.stream().filter(v -> v % 2 == 0).forEach(a -> a = a + 1);
listInteger.stream().forEach(System.out::println);
这里有初始数组。您想要执行以下操作:
过滤掉一些元素(这不是
final
一步);打印过滤的元素(这是
final
步骤)。
为此,您不必创建Streams
两次。请使用一个:
Stream.of(2, 4, 6, 8, 12, 17, 1234) // create stream (there're many way to do it)
.filter(v -> v % 2 == 0) // filter out required elements
.map(v -> v + 1) // transform elements using given rule
.forEach(System.out::println); // finalize stream with printing out each element separately
注: Stream.of(...)创建一个Stream,然后我们添加两个步骤流filter和map再finalize或启动创建流与forEach。

TA贡献1821条经验 获得超6个赞
您正在为局部变量 ( a)分配一个新值,因此这不会影响第二个Stream(your List<Integer>)的来源。请注意,这不是您List<Employee>对List.
由于Integers 是不可变的,因此您无法改变 input 的元素List<Integer>。
相反,您可以创建一个新的List:
List<Integer> newList =
listInteger.stream()
.map(v -> v % 2 == 0 ? v + 1 : v)
.collect(Collectors.toList());
或者您可以流式传输您的 索引List,并替换其中的一些元素List:
IntStream.range(0,listInteger.size())
.filter(i -> listInteger.get(i) % 2 == 0)
.forEach(i -> listInteger.set(i, listInteger.get(i + 1));
添加回答
举报