应用场景
在开发过程中,经常会遇到把一个List集合中的对象按照某个属性进行分组,然后对分组后的结果进行处理的这种情况。 比如,下图按pay_method_type分组展示就是实际开发的场景: ![image.png]
示例
假设存在实体类
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PayMethodVO {
/**
* 编号
*/
private Long id;
/**
* 支付方式
*/
private String name;
/**
* 图片
*/
private String pic;
/**
* 支付方式类别
*/
private Long payMethodType;
}
传统方式
public static void main(String[] args) {
List<PayMethodVO> payMethodVOList = .....;
Map<Long,List<PayMethodVO>> payMethodVOListMap = new HashMap<>();
for (PayMethodVO payMethodVO : payMethodVOList) {
List<PayMethodVO> tmp = payMethodVOListMap.get(payMethodVO.getPayMethodType());
if(tmp == null){
tmp = new ArrayList<>();
}
tmp.add(payMethodVO);
payMethodVOListMap.put(payMethodVO.getPayMethodType(), tmp);
}
System.out.println(map);
}
采用流的方式:使用Collectors.groupingBy
public static void main(String[] args) {
//支付方式
List<PayMethodVO> payMethodVOList = .....;
Map<Long, List<PayMethodVO>> map = payMethodVOList.stream().collect(Collectors.groupingBy(PayMethodVO::getPayMethodType));
System.out.println(map);
}
两种方式效果完全一致。