如何在Java 8中将List转换为Map,.map函数在链中

Nis*_*hat 3 java java-8 java-stream

我上课了

class Passenger {
   String type;
   String firstName;
   String lastName;

   //getter,setter
   public String getName() {
     return firstName + " " + lastName
 } 
}
Run Code Online (Sandbox Code Playgroud)

现在我想将乘客列表转换为Map,其中key为"type",值为"name"列表

我试着实现如下,

passengerList.stream().map(w -> w.getName()).collect(groupBy( getType() ));
Run Code Online (Sandbox Code Playgroud)

但是在.map函数之后,Passenger已经映射到firstName,类型不再可用,不知道如何做到这一点.

Era*_*ran 7

您必须groupingBy首先使用它mapping来获取List每种类型的名称:

Map<String,List<String>> namesByType = 
    passengerList.stream()
                 .collect(Collectors.groupingBy(Passenger::getType,
                                                Collectors.mapping(Passenger::getName,
                                                                   Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)