Lambda 流API:基于同一对象的另一个属性条件收集属性列表

Lambda 流API:基于同一对象的另一个属性条件收集属性列表,lambda,collections,java-8,java-stream,Lambda,Collections,Java 8,Java Stream,考虑一个具有id(String)、name(String)和age(int)属性的对象Person。我想从姓名不为空的人员列表中收集ID列表 class Person { private String id; private String name; private int age; } 是否有一种完全基于streams API的方法 到目前为止,我可以得出以下代码: List<Person> persons = methodReturningListOfP

考虑一个具有id(String)、name(String)和age(int)属性的对象Person。我想从姓名不为空的人员列表中收集ID列表

class Person {
    private String id;
    private String name;
    private int age;
}
是否有一种完全基于streams API的方法

到目前为止,我可以得出以下代码:

List<Person> persons = methodReturningListOfPersons();

List<Person> validNamePersons = persons.stream()
                                       .filter(person -> person.getName() != null)
                                       .collect(Collectors.toList());

List<String> validNamePersonIds = new ArrayList<>();

for(Person p : validNamePersons) {
    validNamePersonIds.add(p.getId());
}
List persons=methodreturninglistopersons();
List validNamePersons=persons.stream()
.filter(person->person.getName()!=null)
.collect(Collectors.toList());
List validNamePersonIds=new ArrayList();
对于(人员p:有效姓名人员){
validNamePersonIds.add(p.getId());
}