我有三个列表:listA
, listB
, listC
.
listA listB
1,a,tf b,true
2,b,tf a,false
3,c,tf c,true
我想要listC
成为listA
+ listB
按listA
的顺序(将 listA
的 tf
替换为 listB
的 true
/false
)。
listC
1,a,false
2,b,true
3,c,true
这是我的代码
Iterator a= listA.iterator();
Iterator b= listB.iterator();
while(a.hasNext()){
while(b.hasNext()){
if(String.valueOf(a.next()).split(",")[1].equals(String.valueOf(b.next()).split(",")[0])){
listC.add(String.valueOf(a.next()).replaceAll("tf", String.valueOf(b.next()).split(",")[1]));
}
}
}
使用单独的迭代器,当 listA 和 listB 被分割和索引时,它工作得很好,但是当我运行上面的代码时,程序就卡住了。有什么想法吗?
最佳答案
你真的离我们不远了。迭代器可能会令人困惑,因此我倾向于避免使用它们。
我无法真正看到代码中无限循环的位置 - 我预计会出现 NullPointerException
因为您正在调用 a.next()
和 b.next()
多次。
如果您更改代码以删除迭代器,它可以正常工作:
List<String> listA = Arrays.asList("1,a,tf", "2,b,tf", "3,c,tf");
List<String> listB = Arrays.asList("b,true", "a,false", "c,true");
List<String> listC = new ArrayList<>();
for(String a : listA)
{
for (String b : listB)
{
if (String.valueOf(a).split(",")[1].equals( String.valueOf(b).split(",")[0] ) )
{
listC.add(String.valueOf(a).replaceAll("tf", String.valueOf(b).split(",")[1]));
}
}
}
System.out.println(listC.toString());
关于Java - 迭代两个列表,比较然后添加到另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45170756/