Java 8 představila streamy a ty mají metodu filter, která má jako parametr predikát (funkce vracejítí pravdu nebo nepravdu). V následujícím příkladu se z původního seznamu vytvoří nový seznam, který bude obsahovat pouze objekty se statusem OPEN.
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class App { public static void main(String[] args) { List<MyObject> list = Arrays.asList( new MyObject(Status.CLOSED.getId(), "AAA"), new MyObject(Status.OPEN.getId(), "BBB"), new MyObject(Status.OPEN.getId(), "CCC"), new MyObject(Status.CLOSED.getId(), "DDD"), new MyObject(Status.OPEN.getId(), "EEE") ); List<MyObject> open = list.stream() .filter(myObject -> myObject.getStatus() == Status.OPEN.id) .collect(Collectors.toList()); open.forEach(openObject -> System.out.println(openObject.getName())); } private enum Status { OPEN(1L), CLOSED(2L); private long id; private Status(long id) { this.id = id; } public long getId() { return id; } } } class MyObject { private long status; private String name; public MyObject(long status, String name) { this.status = status; this.name = name; } public long getStatus() { return status; } public void setStatus(long status) { this.status = status; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Výsledek:
BBB CCC EEE