java8 stream - 过滤地图和聚合

Bic*_*ick 2 java-8 java-stream

可以说我有一个房间列表

List<Room> rooms;
Run Code Online (Sandbox Code Playgroud)

每个房间都有人员名单.

使用java8流我想迭代房间列表,获取所有人,在每个节点上执行一些方法(doSomething())并获得所有过滤对象的列表.

这是使用java 8的最佳实践吗?

List<Asset> pesonsList= new ArrayList<>();
for (Room room : rooms) 
     room.getPersonsList().stream()
                       .filter(person -> person.isTall())
                       .forEach(person -> {
                               doSomething(person);
                               pesonsList.add(person);
                       });
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 6

你最好这样做:

List<Person> persons = 
    rooms.stream()
         .flatMap(room -> room.getPersonsList().stream())
         .filter(Person::isTall)
         .peek(this::doSomething)
         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)