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