Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一次操作数组的所有元素_Java_Arrays - Fatal编程技术网

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)
,这样您就不会无限递归