java - 将 ArrayList 的每个元素添加到另一个 ArrayList 的每个元素

标签 java arraylist

我有一个 ArrayList,其中有 N 个项目。我想迭代 ArrayList,并将 ArrayList 中的每个项目添加到另一个 ArrayList 中的等效项目。我已经尝试过这个,但它不起作用:

ArrayList<Integer> arrList1 = new ArrayList<Integer>();

for(String key: myMap.keyValues() {
    ArrayList<Integer> dynArrList = getArrayListFromSomewhereElse();

    for(Integer i : dynArrList) {
       arrList1.set(i, arrList1.get(i) + dynArrList.get(i)); // sum each item
    }
}

我遇到索引越界异常。我尝试初始化 arrList1,但没有什么区别。我还尝试为其设置最小尺寸。

最佳答案

您尚未提供两个要求和的整数列表。您有dynArrList作为加数,你有 arrList1为了结果。但是你没有第二个加数,这应该告诉你你还没有真正理解你的问题。要么您真正的任务不是您想象的那样,要么您没有正确确定从哪里获取数据。

所以,假设你有两个 List<Integer> s。尽可能对接口(interface)进行编程。你会如何逐项求和?编写一个 sum 方法,并了解如果两个列表大小不同会发生什么。

public List<Integer> sum(List<Integer> left, List<Integer> right) {
    if (left.size() != right.size()) {
        // A runtime exception you write saying that you can't add two
        // arrays of different sizes.
        throw new VectorShapeException(left.size(), right.size());
    }
    List<Integer> vectorSum = new ArrayList<>();
    for (int i = 0; i < left.size(); ++i) {
        vectorSum.add(left.get(i) + right.get(i));
    }
    return vectorSum;
}

确定您要添加的内容,然后使用它。

现在,假设您有计算两个整数数组列表的点积的作业。您可能需要两件事——一种对一个列表的元素求和的方法,以及一种获取乘积 vector 的方法。这可能会造成浪费,因为您可能不需要中间列表,并且会浪费空间。第一个任务很简单:

public int sum(List<Integer> list) {
    int total = 0;
    for(Integer element: list) {
        total += element;
    }
   return total;
}

第二个很简单;只需复制并重命名即可:

public List<Integer> product(List<Integer> left, List<Integer> right) {
    if (left.size() != right.size()) {
        // A runtime exception you write saying that you can't multiply two
        // arrays of different sizes.
        throw new VectorShapeException(left.size(), right.size());
    }
    List<Integer> vectorProd = new ArrayList<>();
    for (int i = 0; i < left.size(); ++i) {
        vectorProd.add(left.get(i) * right.get(i));
    }
    return vectorProd;
}

public int dotProduct(List<Integer> left, List<Integer> right) {
    return sum(product(left, right));
}

但是这里有一个乏味的问题。剪切、粘贴和修改表明我并没有真正在那里思考。 2 参数求和方法与乘积方法之间唯一真正的区别是运算符和名称。这导致了函数式编程,目前这可能太多了。

关于java - 将 ArrayList 的每个元素添加到另一个 ArrayList 的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198874/

相关文章:

java - @ResponseBody 意外格式

java - 字符串数组问题的数组列表

java - 仅将数字字符串放入 hashmap

java - 在java中创建多维HashMap

java - 如何将 arraylist 写入二进制文件

java - 获取所有重复项

java - 如何使用 Jersey 2.x 发送 JSON 请求

java - 谁能帮我解释一下为什么下面的代码片段的输出是X88?

java - java中两个列表的组合

java - 检索数组列表的大小时出错