一次性地图和Groupby

时间:2018-11-13 10:59:49

标签: java java-8 java-stream collectors collect

我有一个模型类,如下:

public class CCP implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "p_id")
    private Integer pId;

    @Id
    @Column(name = "c_id")
    private Integer cId;

    @Column(name = "priority")
    private Integer priority;

}

我有以下要求:

  1. List<CCP>转换为Map<pid, List<cid>>

也就是说,我想将CCP对象列表转换为以pid作为键并以关联cid列表作为值的映射。

我尝试了以下操作:

Map<Integer, List<CCP>> xxx = ccplist.stream()
                .collect(Collectors.groupingBy(ccp -> ccp.getPId()));

但这仅提供CCP列表。

如何获取此处的cid列表而不是CCP?

2 个答案:

答案 0 :(得分:4)

使用mapping

Map<Integer, List<Integer>> xxx = 
    ccplist.stream()
           .collect(Collectors.groupingBy(CCP::getPId,
                                          Collectors.mapping(CCP::getCId,
                                                             Collectors.toList())));

答案 1 :(得分:2)

 ccplist.stream()
         .collect(Collectors.groupingBy(
               CCP::getPId,
               Collectors.mapping(CCP::getCId, Collectors.toList())));