【问题标题】:i++ in the map method of java-stream [duplicate]java-stream的map方法中的i++ [重复]
【发布时间】: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) 获得

【问题讨论】:

标签: java java-stream


【解决方案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 增加为好吧)根本没有使用
猜你喜欢
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
相关资源
最近更新 更多