Java 如何组合来自不同列表的同一索引中的元素?

Java 如何组合来自不同列表的同一索引中的元素?,java,list,loops,merge,Java,List,Loops,Merge,我正在尝试合并多个字符串列表 假设我有两个(可能更多)相同大小的列表: List<String> list1 = Arrays.asList("1One","1Two","1Three"); List<String> list2 = Arrays.asList("2One","2Two","2Three"); List<String> list1 = new {"1One","1Two","1Three"}; List<String> list2

我正在尝试合并多个字符串列表

假设我有两个(可能更多)相同大小的列表:

List<String> list1 = Arrays.asList("1One","1Two","1Three");
List<String> list2 = Arrays.asList("2One","2Two","2Three");
List<String> list1 = new {"1One","1Two","1Three"};
List<String> list2 = new {"2One","2Two","2Three"};
List<String> list3 = new ArrayList<>();
for (int i = 0; i < list1.size(); i++) {
    list3.add(list1.get(i) + list2.get(i));
}
目前我有一个2个对象的列表,每个对象都包含我想要组合其中元素的列表

所以我想将对象1列表中的元素1与对象2列表中的元素1结合起来

这就是我所尝试的:

public void generateFileList(List<Object> cl){


    int count = 0;
    String temp = "";
    for(int i = 0; i < cl.size(); i++){

        for (int x = 0; x < cl.get(i).getItemList().size(); x++) {
            if (count == x){
                temp += cl.get(i).getListItem(x);
                break;
            }

        }
        count++;
        textList.add(temp);

    }
}
public void test(){
    for(String s : textList){
        System.out.println("List Element -  " + s);
    }
    System.out.println(textList.size());
}

这里我做错了什么?

如果列表具有相同的大小,只需使用从0到列表大小的for循环,并在新列表中添加两个列表中相同位置的元素的串联,如for(int I=0;I假设两个列表大小相同:

List<String> list1 = Arrays.asList("1One","1Two","1Three");
List<String> list2 = Arrays.asList("2One","2Two","2Three");
List<String> list1 = new {"1One","1Two","1Three"};
List<String> list2 = new {"2One","2Two","2Three"};
List<String> list3 = new ArrayList<>();
for (int i = 0; i < list1.size(); i++) {
    list3.add(list1.get(i) + list2.get(i));
}
List list1=新的{“一”、“二”、“三”};
列表2=新的{“2一”、“2两”、“2三”};
List list3=新的ArrayList();
对于(int i=0;i
首先,您拥有的代码将无法编译。应该是:

List<String> list1 = Arrays.asList("1One","1Two","1Three");
List<String> list2 = Arrays.asList("2One","2Two","2Three");
对于任意数量的
列表

public List<String> concat(final List<String>... lists) {
    final List<Iterator<String>> it = new LinkedList<>();
    for (List<String> l : lists) {
        it.add(l.iterator());
    }

    final List<String> combined = new ArrayList<>();
    outer:
    while (true) {
        final StringBuilder sb = new StringBuilder();
        for (final Iterator<String> i : it) {
            if (!i.hasNext()) {
                break outer;
            }
            sb.append(i.next());
        }
        combined.add(sb.toString());
    }
    for (final Iterator<String> i : it) {
        if (i.hasNext()) {
            throw new IllegalArgumentException("Lists not the same length.");
        }
    }
    return combined;
}
public List concat(最终列表…列表){
最终列表it=newLinkedList();
对于(列表l:列表){
it.add(l.iterator());
}
合并的最终列表=新的ArrayList();
外部:
while(true){
最终StringBuilder sb=新StringBuilder();
for(最终迭代器i:it){
如果(!i.hasNext()){
打破外部;
}
某人附加(i.next());
}
添加(sb.toString());
}
for(最终迭代器i:it){
if(i.hasNext()){
抛出新的IllegalArgumentException(“列表长度不相同”);
}
}
综合收益;
}

您的代码与描述不匹配。哪里是
list1
list2
?为什么在
generatedFileList
方法中不使用它们?您的整个算法都错了。您使用的是2D列表还是2个列表?你的代码与你的要求不匹配。按索引访问
列表是个糟糕的主意。此外,您复制粘贴的代码没有编译。是的,有一个赋值错误。为什么通过索引访问
列表是个坏主意?如果我有两个以上的对象呢?你可以把这个循环放在提供“一对”列表的任何循环中,或者把它变成一个函数,并为每一对列表调用它。在
链接列表上通过索引访问是
O(n)
-这使得算法
O(n^2)
。除非你能保证
列表
的类型,否则按索引访问通常是一个坏主意。如果我有两个以上的对象怎么办?你说我有
2
。现在你正在改变问题?我想他有某种对象列表,其中每个对象包含两个列表…不太清楚…@crm为任意数量的
列表
public List<String> concat(final List<String>... lists) {
    final List<Iterator<String>> it = new LinkedList<>();
    for (List<String> l : lists) {
        it.add(l.iterator());
    }

    final List<String> combined = new ArrayList<>();
    outer:
    while (true) {
        final StringBuilder sb = new StringBuilder();
        for (final Iterator<String> i : it) {
            if (!i.hasNext()) {
                break outer;
            }
            sb.append(i.next());
        }
        combined.add(sb.toString());
    }
    for (final Iterator<String> i : it) {
        if (i.hasNext()) {
            throw new IllegalArgumentException("Lists not the same length.");
        }
    }
    return combined;
}