java 8 stream从类型A的集合创建类型B的集合

cmo*_*dha 2 java collections java-8 java-stream

我想使用流从类型B创建类型A的集合.

假设我有两个班级

Class Employee{
   String firstName;
   String lastName;
   int age;
   String id;
   String email;
   double salary;
}

Class Person {
  String firstName;
  String lastName;
  String email;
}
Run Code Online (Sandbox Code Playgroud)

要从Employee的集合创建Person的集合,我写下面的代码

public static List<Person> createPersonsFromEmployees(List<Employee> employees) {

        List<Person> persons = new ArrayList<>();

        employees.stream().filter(Object :: nonNull)
                  .forEach(e -> {
                       persons.add(new Person(e.getFirstName(),
                                           e.getLastName(), 
                                           e.getEmail());
                   };)


        return persons;
}
Run Code Online (Sandbox Code Playgroud)

目前,这段代码有效.但我想知道,想知道是否有更好的方法来创建的集合Person,从Employee没有使用forEach.

Nic*_*ert 7

这是一个更清洁的方式.在流中使用.forEach()表示可能有更好的方法来使用Stream.流本来是功能性的,他们试图远离可变性.

public static List<Person> createPersonsFromEmployees(List<Employee> employees)
    Function<Employee, Person> employeeToPerson = e -> new Person(e.getFirstName, e.getLaseName(), e.getEmail());

    return employees.stream()
                    .filter(Object :: nonNull)
                    .map(employeeToPerson)
                    .collect(Collectors.toList());

}
Run Code Online (Sandbox Code Playgroud)