一次操作数组的所有元素

时间:2014-11-20 03:56:03

标签: java arrays

我假设答案是否定的,但我正在寻找一种方法来同时处理数组中的所有元素,而不是编写循环。例如,下面的代码创建了两个数组,然后是错误。显然,评论的行不起作用,但我想避免为我需要应用的每个函数编写一个循环。

package com.company;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] foo = new int[10];
        int[] bar = new int[10];
        for (int i = 0; i < 10; i++){
            bar[i]=i;
        }
        foo += bar; // want to add elements of these arrays pairwise. this fails.
        bar += 1; // want to add 1 to each element of the array. this also fails.
        System.out.println(Arrays.toString(foo));
    }
}

4 个答案:

答案 0 :(得分:1)

如果您使用的是Java 8,则可以使用lambda表达式,尽管它可能不仅仅是循环。这看起来像这样:

final int barFinal = bar;
final int fooFinal = foo;
foo = Arrays.stream(bar).map(i -> barFinal[i] + fooFinal[i]).toArray();
bar = Arrays.stream(bar).map(i -> i + 1).toArray();

这适用于您的具体示例,但对于更复杂或任意的数据很难做到。

答案 1 :(得分:1)

对java数组的各个元素集的任何操作都需要一个循环,无论它是显式的(for循环)还是隐式的(map函数)。你当然可以编写一个对象来展示你在foo和bar行中看到的行为,以隐藏循环,但它仍然存在。 (当然,您将无法使用运算符重载并使等式的+运算符部分发生 - 它必须是方法调用)

答案 2 :(得分:0)

这不会覆盖数组,而是每次获取时都会获得所需内容。

  List<Integer> bar= new ArrayList<Integer>(){
      @Override
      public Integer get(int i){
          return super.get(i)+foo[i];
      }
  };
  bar.addAll(Arrays.asList(bar));

bar.get(count)将获得您所需的一切。

答案 3 :(得分:0)

即使看起来像现有的特殊操作符符合您的要求,但实质上使用循环。由于Set的结构需要在循环中处理元素。即使我没有听说过一个结构可以做这样的操作。