精品list 元素 分组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精品list 元素 分组相关的知识,希望对你有一定的参考价值。

应用场景

在开发过程中,经常会遇到把一个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);

两种方式效果完全一致。

以上是关于精品list 元素 分组的主要内容,如果未能解决你的问题,请参考以下文章

java8 list数据过滤,分组

list分组------根据某一个字段分组

list分组------根据某一个字段分组

将列表的元素分组为子列表(可能使用番石榴)

如何通过第一个元素对列表内的列表进行分组?

Python通过Groupby实现分组