Java 8 Steam 常用的几个方法

1.List 转 Map

public void listToMap(){
    // list 集合
    List<Entity> list = getList();
    //list 转 map Map<String,String>
    /**
     * 注意事项:
     * 1、key 不能为空
     * 2、key 需要唯一
     * 3、作为key的值有可能重复,这时候流的处理会抛出个异常:Java.lang.IllegalStateException:Duplicate key 所以最好加上(k1, k2) -> k2 合并策略,如果有相同key 取哪一个(这里指取k2)
     */
    Map<String, String> stringMap = list.stream().collect(Collectors.toMap(Entity::getId, Entity::getName, (k1, k2) -> k2));
    //list 转 map Map<String,Entity>
    // 对实体进行分组
    Map<String, Entity> entityMap = list.stream().collect(Collectors.toMap(Entity::getId, e -> e, (k1, k2) -> k2));


}

2.针对实体提取list集合

public void findList(){
    // list 集合
    List<Entity> list = getList();
    /**
     * filter:根据某个条件过滤
     * distinct:去重
     */
    List<String> collect = list.stream().map(Entity::getName).filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList());
}

3.分组

public void group(){
    // list 集合
    List<Entity> list = getList();
    /**
     * 1.需要保证分组key不能为空
     */
    Map<String, List<Entity>> collect = list.stream().filter(entity -> StringUtils.isNotEmpty(entity.getName())).collect(Collectors.groupingBy(Entity::getName));
}

4.计算

public void calculate(){
    // list 集合
    List<Entity> list = getList();
    /**
     * 1.需要保证计算的字段值不能为空,否则会报错
     */
    // BigDecimal 的计算方法
    BigDecimal reduce = list.stream().map(entity -> null == entity.getCount() ? BigDecimal.ZERO : entity.getCount()).reduce(BigDecimal.ZERO, BigDecimal::add);
    // int ,long 等计算方法
    int sum = list.stream().mapToInt(Entity::getaInteger).sum();
    Integer integer = list.stream().map(Entity::getaInteger).reduce(Integer::sum).orElse(0);
    
}

5.分组计算

public void calculateGroup(){
    // list 集合
    List<Entity> list = getList();
    /**
     * 1.需要保证计算的字段值不能为空,否则会报错
     */
    // BigDecimal 的计算方法
    Map<String, BigDecimal> collect = list.stream().collect(Collectors.groupingBy(Entity::getName,
            Collectors.reducing(BigDecimal.ZERO, entity -> null == entity.getCount() ? BigDecimal.ZERO : entity.getCount(),
                    BigDecimal::add)));
    // int ,long 等计算方法
    list.stream().collect(Collectors.groupingBy(Entity::getName,
            Collectors.summarizingInt(entity -> null == entity.getaInteger() ? 0 : entity.getaInteger())));


}

排序,过滤,就不在这说了。

详情可以去看这篇博客 https://blog.csdn.net/mu_wind/article/details/109516995

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值