Простой подход является foreach в списке1 и проверяет, находится ли элемент в списке2, если не добавлен в список3.
outer:
for(String s : list1) {
for(MyClass c : list2)
if(c.getStr().equals(s))
continue outer;
filteredList.add(c);
}
Если вы обнаружите, что продолжаете называть недоумение, извлеките внутренний цикл в логическая возвращающая функция. Вы также можете заменить классический foreach для итератора лямбда-потока.
public static boolean isInList(ArrayList<MyClass> list, String s) {
list2.stream().foreach((o)-> {
if(o.getStr().equals(s)) {
return true;
}
});
return false;
}
list1.stream().foreach((s) -> {
if(!isInList(list2, s)) {
list3.add(s);
}
});
, но он действительно выглядит более неприглядным / загрязненным и ненужным для моих глаз.
Кроме того, String str
в ваш класс не имеет общедоступного определения, поэтому я в обоих примерах использовал метод getStr (), предполагая, что ваш класс следует за моделью java bean и содержит метод getStr ().