Given two Lists of Objects, I'd be able to tell which items are not in their intersect based on one of their attributes. Let's look at the following example:
I have a class Foo
that has two attributes: boo
and placeholder
class Foo {
private int boo;
private int placeholder = 1;
public Foo(int boo) {
this.boo = boo;
}
public int getBoo() {
return boo;
}
}
Now I am creating two Lists from that (let's say this is my input)
List<Foo> list1 = new ArrayList<Foo>();
list1.add(new Foo(1));
list1.add(new Foo(2));
list1.add(new Foo(3));
List<Foo> list2 = new ArrayList<Foo>();
list2.add(new Foo(0));
list2.add(new Foo(1));
list2.add(new Foo(2));
And now I'd like to say which Items are in list1
and not in list2
or in list2
and not in list1
based on their attribute boo
. So in the above example I want a List<Foo> notInIntersectList
that contains one Foo(0)
and one Foo(3)
.
List<Foo> notInIntersectList = new ArrayList<Foo>();
list1.forEach(li1foo -> {
boolean inBothLists = false;
list2.forEach(li2foo -> {
if (li1foo.getBoo() == li2foo.getBoo()) {
inBothLists = true;
}
});
if (!inBothLists) {
notInIntersectList.add(li1foo);
}
});
//now I covered all items in list1 but not in list2. Now do this again with lists swapped, so I can also cover those.
//...
Sadly I am getting Local variable inBothLists defined in an enclosing scope must be final or effectively final
as an error. How is this issue solved properly, since this seems not to be the "right" solution?