有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可以在使用Iterable迭代元素时更改元素。forEach(消费者)?

我可以在使用Iterable迭代元素时更改它们吗。forEach(消费者)?或者在消费者内部。接受(E)我只能读取基础Iterable的元素,但不能更改它们

如果我可以更改它们,正确的语法是什么

ArrayDeque d = new ArrayDeque<Integer>();
d.add(1);
d.add(2);
d.add(3);
d.add(4);

Consumer<Integer> cons = (e)->{e = e*10;}; // compiles!

d.forEach(cons);

System.out.println(d); // 1 2 3 4 not 10 20 30 40

共 (2) 个答案

  1. # 1 楼答案

    不,当使用forEach时,不能修改元素,因为它的actionConsumer,它只accepts值。 forEach方法的示例代码段

    default void forEach(Consumer<? super T> action)
     for (T t : this)
         action.accept(t);
    

    重点在于它不会产生任何价值

  2. # 2 楼答案

    你想做的和以下一样:

    for (Integer e : d) {
       e = e * 10;
    }
    

    但赋值给e并不会改变它在deque中的值

    要想做你想做的,就这么做

     d = d.stream().map(a -> a * 10).collect(
                Collectors.toCollection(ArrayDeque::new));
     System.out.println(d);