Nested loops including conditions in java 8

I have a piece of code

List<Obj1> result = new ArrayList<Obj1>();
for (Obj1 one : list1) {
            for (Obj2 two : list2) {
                if (one.getStatus() == two) {
                    result.add(one);
                }
            }
        }

      

In Java 8 Using streams, I could write like this:

 list1.stream().forEach(one -> {
        if (list2.stream().anyMatch(two -> one.getStatus() == two)) {
            result.add(one);
        }            
    });

      

can be greatly simplified.

+3


source to share


1 answer


Assuming it list2

contains unique values ​​and you can use for equals

instead , you can write it like this:==

Obj2

List<Obj1> result = list1.stream()
                         .filter(one -> list2.contains(one.getStatus()))
                         .collect(Collectors.toList());

      



Although it would be more efficient to place items list2

in Set

.

+7


source







All Articles