有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java迭代两个列表,比较然后添加到另一个列表

我有三个列表:listAlistBlistC

listA        listB
1,a,tf       b,true
2,b,tf       a,false
3,c,tf       c,true

我希望{}是{}+{},顺序是{}(用{}{}/{}代替{}的{})

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,使用单独的迭代器进行拆分和索引,效果很好,但是当我运行上面的代码时,程序就冻结了。有什么想法吗


共 (1) 个答案

  1. # 1 楼答案

    你真的不远了。迭代器可能会让人困惑,所以我倾向于避免使用迭代器

    我真的看不出无限循环在代码中的位置-我希望是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());