java-stream的map方法中的i++ [重复]

Posted

技术标签:

【中文标题】java-stream的map方法中的i++ [重复]【英文标题】:i++ in the map method of java-stream [duplicate] 【发布时间】:2019-02-14 16:25:42 【问题描述】:

在代码中,我想通过map()方法修改变量i

Integer[] seq = 1, 3, 4, 1, 8, 11;

List<Integer> seqInt = Arrays.asList(seq);
List<Integer> seqFiltered = seqInt.stream().filter(i -> i%2!=0)
                                      .map(i -> i++)
                                      .collect(Collectors.toList());
System.out.println(seqFiltered);

但是,它输出[1, 3, 1, 11] 而不是[2, 4, 2, 12],后者可以从map(i -&gt; i+1) 获得

【问题讨论】:

除了 nullpointer 的答案以获取更多详细信息:Is there a difference between x++ and ++x in java? 【参考方案1】:

只需使用前增量而不是后增量运算符。

List<Integer> seqFiltered = seqInt.stream()
                                  .filter(i -> i%2!=0)
                                  .map(i -> ++i)
                                  .collect(Collectors.toList());

另外,您可以利用Arrays.stream 将整数数组用作流

List<Integer> seqFiltered = Arrays.stream(seq)
                                  .filter(i -> i % 2 != 0)
                                  .map(i -> ++i)
                                  .collect(Collectors.toList());

【讨论】:

改用map(i -&gt; i + 1) 会更直观(在我看来),尤其是在i 被丢弃的情况下,因此预增量运算符的副作用(将i 增加为好吧)根本没有使用

以上是关于java-stream的map方法中的i++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java-Stream流方法学习及总结

Java-Stream流方法学习及总结

JavaScript中的map方法

java map去重

Map集合 异常机制 File类 I/O流

c++如何在不改变输入顺序的情况下去重输出?