我无法使用java中的forEach方法进行递增

问题描述 投票:0回答:3

我无法使用 foreach 方法增加列表中的值

List<Integer>l=new ArrayList<Integer>();

    l.add(1);
    l.add(2);
    l.forEach(k->k=new Integer(k.intValue()+1));
     
          
    l.forEach((k->System.out.println(k)));

奇怪的是,在列表中打印值效果很好。

我问这个是因为使用这种方法应该比随意的 for 循环更快 比如这个:

List<Integer>l=new ArrayList<Integer>();
l.add(1);
    l.add(2);
   for(int i=0;i<l.size();i++){
       l.set(i, l.get(i)+1);
   }
     
       
          
    l.forEach((k->System.out.println(k)));
java java-8
3个回答
2
投票

forEach
没有副作用。它只是进行迭代并具有
void
返回类型,这意味着使用它的原始列表/流中没有任何更新。

这是运行的实际代码

List<Integer> l = new ArrayList<>();
l.forEach(new Consumer<Integer>() {
     @Override
     public void accept(Integer integer) {
        integer+=1;  // notice, no return
     }
 });

您想使用

l.stream().map(k -> k + 1)
来更新每个元素

l.stream().map(new Function<Integer, Integer>() {
    @Override
    public Integer apply(Integer integer) {
        return integer + 1;
    }
});

1
投票

您可以使用Stream API。使用

map()
增加列表的值,然后收集为列表并分配列表。

l = l.stream().map(k -> k+1).collect(Collectors.toList());

0
投票

有很多方法可以做到这一点,例如您可以使用

IntStream
,如下所示:

IntStream.range(0, l.size()).forEachOrdered(i -> l.set(i, l.get(i) + 1));

演示:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        List<Integer> l = new ArrayList<>();

        // Add some integers to the list
        l.add(1);
        l.add(2);

        // Increment elements by 1
        IntStream.range(0, l.size()).forEachOrdered(i -> l.set(i, l.get(i) + 1));

        // Display
        l.forEach(System.out::println);
    }
}

输出:

2
3
© www.soinside.com 2019 - 2024. All rights reserved.