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