Skip to content

How create a list of an object from two different types of lists

I have two objects that have two fields in common, code field and position field. I use two distinct lists, one of Object1 and another of Object2. Object2 was filtered before and had missing elements compared to Object1. I need to stream() on Object1 to compare code value and position value of objects that are still in the list of Object2 to keep them in the list of Object1.


//List<Object1> object1 :
object1.get(0) // code="VALUE1"; position=1; other fields...
object1.get(1) // code="VALUE2"; position=2; other fields...
object1.get(2) // code="VALUE3"; position=3; other fields...

//List<Object2> object2 :
object2.get(0) // code="VALUE2"; position=2; other fields...
object2.get(1) // code="VALUE3"; position=3; other fields...

object1 =; // After object1 should have :
object1.get(0) // code="VALUE2"; position=2; other fields...
object1.get(1) // code="VALUE3"; position=3; other fields...

How can I do this with Java 8 Stream API?



If I understood your description correctly the following should do it:

public static void main (String[] args) {
    List<Object1> object1 = new ArrayList<>();
    object1.add(new Object1("1", 1));
    object1.add(new Object1("2", 2));
    object1.add(new Object1("3", 3));
    object1.add(new Object1("4", 4));
    object1.add(new Object1("5", 5));

    List<Object2> object2 = new ArrayList<>();
    object2.add(new Object2("1", 1));
    object2.add(new Object2("2", 2));
    object2.add(new Object2("5", 5));

    List<Object1> filteredObject1 =
            .filter(o1 -> -> o2.getCode().equals(o1.getCode()) && o2.getPosition() == o1.getPosition()))


It keeps in object1 the Object1 instances that have the same code and position of an Object2 instance in object2.