在arraylist的索引处组合元素 - Java

时间:2016-08-04 07:43:34

标签: java arraylist

我有三个ArrayLists,每个都有相同的大小:

arrayListOne   = {"ABC", "DEF", "GHI"}
arrayListTwo   = {"JKL", "MNO", "PQR"}
arrayListThree = {"STU", "VWX", "YZ0"}

我阅读并环顾四周,但我似乎无法找到关于如何在同一索引处合并元素,然后使用合并元素创建新ArrayList的直截了当的答案。与示例一样,

arrayListMerged = {"ABCJKLSTU", "DEFMNOVWX", "GHIPQRYZ0"}

其中"ABCJKLSTU"是索引0处的合并元素,"DEFMNOVWX"是索引1处的合并元素,"GHIPQRYZ0"是索引2处的合并元素。

也许这个问题之前已经得到了回答,但我在这里很新,并且仍然需要掌握某些想法,这些想法可能导致不理解之前的答案。

5 个答案:

答案 0 :(得分:1)

不确定您是否正在使用ArrayList,因为它们没有以这种方式初始化...

同样的概念应该适用于arraylist

    String[] arrayListOne = { "ABC", "DEF", "GHI" };
    String[] arrayListTwo = { "JKL", "MNO", "PQR" };
    String[] arrayListThree = { "STU", "VWX", "YZ0" };

    String[] arrayListMerged = new String[arrayListOne.length];

    for (int i = 0; i < arrayListOne.length; i++) {
        arrayListMerged[i] = arrayListOne[i] + arrayListTwo[i] + arrayListThree[i];
    }

    for (int i = 0; i < arrayListMerged.length; i++) {
        System.out.println(arrayListMerged[i]);
    }

这是Java 8方式:

List<String> arrayListMerged = arrayListOne.stream()
                              .map(e -> arrayListTwo.get(arrayListTwo.indexOf(e)) + e + arrayListThree.get(arrayListThree.indexOf(e))
                              .collect(Collectors.toList());

答案 1 :(得分:1)

正如你提到的,我假设所有列表都有相同的大小。

没有直接的内置功能。相反,您可以创建一个从0到任何arrayList大小的循环。在该循环内部提取给定循环索引处的所有列表的字符串值,并将所有三个连接起来然后将其添加到新列表(比如newList)。继续进行所有循环迭代。

答案 2 :(得分:0)

因此,每个ArrayList具有相同的大小,只需创建一个直到一个ArrayList大小的for循环。 arrayListOne.size()为您提供了它的大小。

使用arrayListOne.get(index)arrayListTwo.get(index)arrayListThree.get(index),您可以获得ArrayLists的给定索引处的值。

arrayListMerged.add(*insert merged Strings here*)将合并后的值添加到新的ArrayList。

看看API。它在那里得到了很好的解释https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

答案 3 :(得分:0)

我担心Java中没有开箱即用的功能。但是实现自己的相当容易。以下是我将如何做到这一点:

final int count = arrayListOne.length();

if(arrayListTwo.length() != count || arrayListThree.length() != count)
    throw new InvalidArgumentException("Lists have different number of elements");

final List<String> result = new ArrayList<>(count);
for(int i=0; i<count; i++) {
    result.add(arrayListOne.get(i)+arrayListTwo.get(i)+arrayListThree(i));
}

答案 4 :(得分:0)

您可以使用Java 8流:

String[] arrayListOne   = {"ABC", "DEF", "GHI"};
String[] arrayListTwo   = {"JKL", "MNO", "PQR"};
String[] arrayListThree = {"STU", "VWX", "YZ0"};

String[] newList = new String[3];

Arrays.stream(arrayListOne).forEach(s ->
        {
            int index = Arrays.asList(arrayListOne).indexOf(s);
            newList[index] = s + arrayListTwo[index] + arrayListThree[index];
        } );

或者更好的方法是,不要使用数组,使用ArrayList,所以当你有不同大小的列表时,你可以这样做:

        ArrayList<String> finalList = new ArrayList<>();
        ArrayList<String> arrayListOne = new ArrayList<>();
        ArrayList<String> arrayListTwo = new ArrayList<>();
        ArrayList<String> arrayListThree = new ArrayList<>();



        arrayListOne.forEach(s -> {
            int index = arrayListOne.indexOf(s);
            finalList.add(s + arrayListTwo.get(index) == null ? "" : arrayListTwo.get(index) + arrayListThree.get(index) == null ? "" : arrayListThree.get(index));
        });