【问题标题】:Java element-wise sum 2 arraysJava element-wise sum 2个数组
【发布时间】:2014-04-25 09:50:01
【问题描述】:

鉴于我在 Java 中有两个数组 AB 我想逐个元素地添加元素,这会产生一个 sum 数组。使用循环隐式执行此操作很容易,但我想知道是否有更优雅的解决方案,可能使用 guava 集合或内置 java utils。或者也许是一种类似于 python 的方式,它使列表推导变得容易。

例子:

A   = [2,6,1,4]
B   = [2,1,4,4]
sum = [4,7,5,8]

【问题讨论】:

  • 使用循环非常优雅。
  • @Eel Lee 你是看正文还是只看标题?
  • 就像 Maroun 说的,使用循环是array进行任何操作的优雅方式
  • @RafaEl 从 Java 8 开始就没有必要了。
  • 好的,忽略我的评论。我要去探索java 8

标签: java arrays elements addition


【解决方案1】:

你可以这样做:

private void sum() {
    int a[] = {2, 6, 1, 4};
    int b[] = {2, 1, 4, 4};

    int result[] = new int[a.length];
    Arrays.setAll(result, i -> a[i] + b[i]);
}

这将首先创建正确大小的int result[]

然后随着昨天发布的 Java 8,简单的部分来了:

  • 你可以做一个Arrays.setAll(int[] array, IntUnaryOperator);
  • 作为IntUnaryOperator,您可以创建一个将索引映射到结果的lambda,在这里我们选择将i 映射到a[i] + b[i],这正是我们的总和。
  • 对于非常大的数组,我们甚至可以使用Arrays.parallelSetAll

【讨论】:

  • @MarounMaroun 是的,看起来它使用 lambdas
  • 太棒了!.. 你能详细解释一下映射吗?
  • @user3354890:- 那你就可以接受我的回答了! :)
  • @user3414693 您的解决方案正在使用循环,其中,OP 已经提到 “使用循环隐式执行此操作很容易......” :(
  • 我会接受这个解决方案作为答案,因为这是我最终寻找的解决方案,即使它与 java 7 不兼容。我只需要说服公司升级 ;-) .
【解决方案2】:

您可以像这样在数组上使用 java8 流和操作:

//in this example a[] and b[] are same length
int[] a = ...
int[] b = ...
int[] result = new int[a.length];
IntStream.range(0, a.length)
     .forEach(i -> result[i] = a[i] + b[i]);

The answer in java8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多