Java的Stream流对集合数据进行分组,然后根据字段筛选


Java的Stream流对数据进行分组,然后根据字段筛选,返回新的List

Java有一个对象 UserEntity。

@Getter
@Setter
public class UserEntity implements Serializable {
    private static final long serialVersionUID = -8677623805389612888L;

    private Integer marketNo;
    private String reportCode;
    private Integer interCode;
    private String bondPaymentType;
    private BigDecimal installmentPayBalance;
    private Integer expirePayDate;
    // 日期  2025-05-01
    private String BEG_DATE;
}

现在有一个List,需要对这个list进行分组和筛选:

  1. 根据 marketNo 和 reportCode 字段进行分组。
  2. 对于分组后的数据,取 BEG_DATE(时间) 最大的一条。
List<UserEntity> list = new ArrayList<>();
        // 将 list中的数据,按照 MarketNo + InterCode 进行分组,这里将2个字段拼接达到目的,分组后取 BEG_DATE 最大的那条数据
        List<UserEntity> collect = list.stream().collect(Collectors.groupingBy(a -> a.getInterCode() + "|" + a.getMarketNo(), Collectors.collectingAndThen(
                Collectors.maxBy(Comparator.comparing(UserEntity::getBEG_DATE)), Optional::get
        ))).values().stream().collect(Collectors.toList());
JAVA-技能点
知识点