我假设答案是否定的,但我正在寻找一种方法来同时处理数组中的所有元素,而不是编写循环。例如,下面的代码创建了两个数组,然后是错误。显然,评论的行不起作用,但我想避免为我需要应用的每个函数编写一个循环。
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));
}
}
答案 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的结构需要在循环中处理元素。即使我没有听说过一个结构可以做这样的操作。