java8中对stream流的一些常见使用

java8中对stream流的一些常见使用

你还在使用for循环做累加计算吗?还在用for循环取出特定字段吗?还在用for循环封装一个map,封装list,拼接字符串吗?不妨试试使用stream流来处理,使你的代码看起来方便且优雅,下面是工作中对stream流的一些常用案例。

//假设列表
List<User> userList = userMapper.list();

//获取列表中对象的某一个字段,(此处获取所有的id)
//加filter的目的是过滤所有userId非空的数据,然后取出,否则取出时遇到空值会报错
List<Long> userIdList = userList.stream().filter(f->ObjectUtils.isNotEmpty(f.getId)).map(User::getId).collect(Collectors.toList());

//获取userId为key,user对象作为value的Map
Map<Long, User> userMap = userList.stream().filter(f->ObjectUtils.isNotEmpty(f.getId)).collect(Collectors.toMap(o->o.getId,o->o));

//取出列表中的某个字段(仅限String格式字段)的所有值按照逗号分隔,连成一个字符串(若要以"-"分隔,将","改为"-"即可)
String contentStr =  userList.stream().filter(f->ObjectUtils.isNotEmpty(f.getContent)).map(User::getContent).collect(Collectors.joining(","));

//计算总和,平均数,最大值,最小值(int类型可更换mapToDouble为mapToInt)
DoubleSummaryStatistics doubleSummaryStatistics  = userList.stream().filter(f->ObjectUtils.isNotEmpty(f.getScore)).mapToDouble(User::getScore).summaryStatistics();
//获取总和
double sum = doubleSummaryStatistics.getSum();
//获取平均值
double average = doubleSummaryStatistics.getAverage();
//获取数据条数
long count = doubleSummaryStatistics.getCount();
//获取最大数值
double max = doubleSummaryStatistics.getMax();
//获取最小数值
double min = doubleSummaryStatistics.getMin();

//如果计算类型是BigDecimal,不仅可以使用上面的方式,也可以使用下面的方式
//获取总和
BigDecimal sum = userList.stream().filter(f->ObjectUtils.isNotEmpty(f.getScore)).map(User::getScore).reduce(BigDecimal::add).get();
//获取最大值
BigDecimal max = userList.stream().filter(f->ObjectUtils.isNotEmpty(f.getScore)).map(User::getScore).reduce(BigDecimal::max).get();
//获取最小值
BigDecimal min = userList.stream().filter(f->ObjectUtils.isNotEmpty(f.getScore)).map(User::getScore).reduce(BigDecimal::min).get();

//排序
//按照年龄大小升序排序
userList = userList .stream().filter(f->ObjectUtils.isNotEmpty(f.getScore)).sorted(Comparator.comparing(User::getScore)).collect(toList());
//按照年龄大小降序排序
userList = userList .stream().filter(f->ObjectUtils.isNotEmpty(f.getScore)).sorted(Comparator.comparing(User::getScore).reversed()).collect(toList());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值