Java 8 představila streamy a ty mají různé metody. V tomto příspěvku si ukážeme použití metod filter a map. Z původního seznamu se nejdříve vyfiltrují položky, které mají (present) status a vrátí se nový seznam, který obsahuje tyto statusy.
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class App2 {
public static void main(String[] args) {
List<MO> list = Arrays.asList(
new MO(Optional.of(Status.CLOSED.getId()), "AAA"),
new MO(Optional.of(Status.OPEN.getId()), "BBB"),
new MO(Optional.empty(), "CCC"),
new MO(Optional.empty(), "DDD"),
new MO(Optional.of(Status.OPEN.getId()), "EEE")
);
List<Long> open = list.stream()
.filter(myObject -> myObject.getStatus().isPresent())
.map(myObject -> myObject.getStatus().get())
.collect(Collectors.toList());
open.forEach(System.out::println);
}
private enum Status {
OPEN(1L), CLOSED(2L);
private long id;
private Status(long id) {
this.id = id;
}
public long getId() {
return id;
}
}
}
class MO {
private Optional<Long> status;
private String name;
public MO(Optional<Long> status, String name) {
this.status = status;
this.name = name;
}
public Optional<Long> getStatus() {
return status;
}
public void setStatus(Optional<Long> status) {
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Výsledek:
2 1 1

