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;
}