如果条件里面嵌套for循环在android中

-3 java arraylist

我有两个ArrayList相同的模型类(即ListAListB),我添加了相同的数据.然后我只在第二个arraylist中添加了一些数据ListB.

现在,我只想要获取的数据是在两个不同的ListAListB,结果保存在第三个数组列表ListC.

我试过下面的代码.但是,所有元素都存储在其中ListC,而不是仅存储不同的元素:

ArrayList<C> ListC = new ArrayList<>();

for (int i = 0; i < ListA.size(); i++) {

    for (int j = 0; j < ListB.size(); j++) {

        if (ListA.get(i).getName() == ListB.get(j).getName()) {

            Log.e("Do", "Nothing");

        } else {
            C c = new C(b.get(j).getName());
            ListC.add(c);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑问题

ArrayList<Model> a = new ArrayList<>();
Model model = new Model();
model.setName("MaHi");
model.setAge("20");
a.add(model);

ArrayList<Model> b = new ArrayList<>();
Model model = new Model();
model.setName("MaHi");
model.setAge("20");
b.add(model);
Model model2 = new Model();
model2.setName("Ritu");
model2.setAge("21");
b.add(model2);

ArrayList<Model> c=new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

现在我想将那些不在arraylist a或arraylist b中的数据(即model2的数据)提取到c的arraylist中;

Mar*_*olt 5

问题是你正在迭代所有组合.

让我们说A = [1, 2, 3]B = [1, 3, 4].然后,你的循环将进行比较

  • a=1b=1.两者都是平等的,没有做任何事.非常好.
  • a=1b=3.它们不相等,所以添加了3 C.这是你的第一个问题:3实际上是在A,但只是不在你当前的迭代中.
  • a=1b=4.它们不相等,因此增加了4 C.在这种情况下,这是可以的,因为4不在A.
  • a=2b=1.它们不相等,所以添加1 C.然而,实际上是1 A.
  • 等等

你看到你的解决方案不起作用了吗?你不能比较每个组合.相反,你必须检查其中的每个元素B,如果它在A.如果不是,请添加.这个,直接翻译成伪代码,看起来像

// for every element in ListB
for (int i = 0; i < ListB.length(); i++) {
    B b = ListB.get(i);
    // if this is not in ListA
    if (!ListA.contains(b))
        ListC.add(b);
}
Run Code Online (Sandbox Code Playgroud)

但是,在这里你应该使用for-each循环for (B b: ListB).甚至更好,只需使用ListC.addAll(ListB); ListB.removeAll(ListA).(并确保hashCodeequals正确编写 - 但这是一个不同的问题.)

当然,这需要在元素ListAListB是同一类型的.请参阅Jekin对使用较少标准库方法的解决方案的答案,这些方法也适用于不同类型(getName()当然,只要两者都实现).

这也解决了第二个问题,如您对问题的评论中所述:您无法比较字符串==,但必须使用该equals方法.尝试x = new String("a"); y = new String("a"); assert(x==y);assert(x.equals(y));