Java 一次操作数组的所有元素
我假设答案是否定的,但我正在寻找一种方法来同时操作数组中的所有元素,而不是编写循环。例如,下面的代码创建两个数组,然后出现错误。显然,注释行不起作用,但我希望避免为需要应用的每个函数编写循环Java 一次操作数组的所有元素,java,arrays,Java,Arrays,我假设答案是否定的,但我正在寻找一种方法来同时操作数组中的所有元素,而不是编写循环。例如,下面的代码创建两个数组,然后出现错误。显然,注释行不起作用,但我希望避免为需要应用的每个函数编写循环 package com.company; import java.util.Arrays; public class Main { public static void main(String[] args) { int[] foo = new int[10];
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));
}
}
package.com公司;
导入java.util.array;
公共班机{
公共静态void main(字符串[]args){
int[]foo=新int[10];
int[]条=新的int[10];
对于(int i=0;i<10;i++){
bar[i]=i;
}
foo+=bar;//要成对添加这些数组的元素。此操作失败。
bar+=1;//希望向数组的每个元素添加1。这也失败。
System.out.println(Arrays.toString(foo));
}
}
如果您使用的是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();
这适用于您的特定示例,但在更复杂或任意的数据上很难做到。对java数组的单个元素集执行任何操作都需要循环,无论是显式(for loop)还是隐式(map function)。您当然可以编写一个对象来显示您在foo和bar行中看到的行为,以隐藏循环,但它仍然存在。(当然,您不能使用运算符重载并使等式中的+运算符部分发生-它必须是一个方法调用)这不会覆盖数组,而是每次它获取时都会得到所需的值。
List<Integer> bar= new ArrayList<Integer>(){
@Override
public Integer get(int i){
return super.get(i)+foo[i];
}
};
bar.addAll(Arrays.asList(bar));
列表栏=新建ArrayList(){
@凌驾
公共整数get(int i){
返回super.get(i)+foo[i];
}
};
addAll(Arrays.asList(bar));
bar.get(count)
将得到您所需要的。即使看起来存在满足您要求的特殊操作符,但本质上使用循环。由于Set的结构需要处理循环中的元素。甚至我也没有听说过一个结构可以做这样的操作。使用原始数组并不是编写现代惯用Java的方法,原因是一个健壮的集合框架,它有列表
、集合
和映射
接口。目标是什么?递归函数如何?在操作后,您希望在foo
中使用哪些精确值?你说的两两到底是什么意思?是的,也许最好/最直接的方法就是循环。如果您非常关心外观,您可以添加一个扩展方法或其他东西,我认为您需要super.get(i)
而不是this.get(i)
,这样您就不会无限递归