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

时间:2016-04-16 08:19:25

标签: java java-8 java-stream

我有一个班级

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

   //getter,setter
   public String getName() {
     return firstName + " " + lastName
 } 
}

现在我想将乘客列表转换为Map,其中键为“type”,值为“name”列表

我尝试实现以下目标,

passengerList.stream().map(w -> w.getName()).collect(groupBy( getType() ));

但是在.map函数后,Passenger已映射到firstName,类型不再可用,不知道如何执行此操作。

1 个答案:

答案 0 :(得分:7)

您必须先groupingBy然后使用mapping获取每种类型的List名称:

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