还没掌握Java8 stream流你就out了

     直入主题!

     什么是stream流?

     直观地讲,stream流是来自数据源的元素形成的一个队列,并且支持聚合操作。

     哪些数据可以作为stream流的数据源?流的来源可以是集合,数组。但是,工作中以集合较为常见。在Java8中,我们可以使用集合接口提供的stream()方法生成流。就像下面这样。

List<String> list = Arrays.asList("a","b","c","abc");list.stream();

     stream流是Java8的新特性,它的出现,可以让开发者以一种声明式的方式来处理数据。

     很多人不理解,什么是声明式的方式?看下面的栗子。

List<User> userList = this.list();userList.stream().foreach(b -> b.setName("小芸君"));

        上面第二行代码就是声明式的方式。也就是说,在stream流中,如果你想要使用流中的对象,只要作下声明,就可以使用了。

     有了stream流,操作集合就变得简单了。接下来,我们就结合实际工作中应用场景来讲讲具体操作的使用。

  • 假如我要获取年龄小于35岁的用户列表,那么像下面这样就可以了。

List<User> userList = userList.stream().filter(b -> b.getAge() < 35 ).collect(Collectors.toList());

     fitler方法可以设置条件过滤出流中满足需要的元素。

  • 假如我想通过现有的User列表得到一个只有User主键的新列表,也很简单。

List<Long> idList = userList.stream().map(User::getId()).collect(Collectors.toList());

     map方法可以将每个元素映射到对应的结果,并且应用比较广泛,接着往下看。

  • 假如我要目标用户列表里的每个人加薪500元,也可以使用map方法。

List<Bigdecimal> salaryAmount = userList.stream().map(b -> new Bigdecimal(500).add(b.getSalary())).collect(Colleactors.toList());

     需要注意的一点是,上面使用map方法后的结果就是一个薪资的新List了。

  • 假如我要给用户列表按年龄从大到小(降序)排序,那么该怎么做?

List<User> userList = userList.stream().sorted(Comparator.comparing(User::getAge()))                      .revsersed().colect(Collectors.toList);

     sorted方法可以对流进行排序。不过值得注意的是,在进行排序操作前,User实体类需要实现Comparable接口。

     实际应用中我们很少这样做,一般都会在数据库层面进行排序。

  • 假如我要对用户列表按部门分组

Map<Long,List<User>> userListMap = userList.stream().collect(Collectors.groupingBy(User::getDeptId(), Collectors.toList()));

     分组之后返回的是以分组字段为key,List<User>为value的Map对象。

  • 我们还可以将字符串列表转化为特定字符串

List<String> list = Arrays.asList("a","c","b","abc");String str = list.stream().collect(Collectors.joining(","));

     返回的str,是以逗号分隔的字符串。这有时候很有用!

     stream流不是个特别难以掌握的技术,只能算是一个便捷的工具吧。但是,掌握它可以让我们的编程变得更优雅,更高效!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L小芸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值