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 -> 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 -> i + 1)
会更直观(在我看来),尤其是在i
被丢弃的情况下,因此预增量运算符的副作用(将i
增加为好吧)根本没有使用以上是关于java-stream的map方法中的i++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章