注册

java流太太太..............好用了

  • 情景:一个集合对象list,现在想获取这个集合中每个对象的id,并将这些id值存放在另一个集合中,方便我去查询数据。如果是你来实现这个需求,你会用什么方法去实现呢。

我猜会有许多人会选择循环变量这个集合对象,取出id存放在集合里面,代码是这样的:


List<Clazz> list = clazzes;
List<Long> ids = new ArrayList();
for (Clazz clazz : list) {
ids.add(clazz.getId());
}

但是!实际上,这个需求可以只用一行代码就可以解决,那是用的什么呢?“流”请看代码:


List<Clazz> list = clazzes;
List<Long> collect = list.stream().map(Clazz::getId).collect(Collectors.toList());

使用流一行代码就可以解决关键看着清晰明了。
上面list.stream().map(Clazz::getId).collect(Collectors.toList())这一行代码用了JAVA8 的两个新特性



  • 双冒号 双冒号就是把方法当作参数传递给需要的方法,或者是传递到stream()中去。在这里就是将其传到stream中去其语法格式 类名::方法名
  • stream 流 通过Collectors 类将流转换成集合元素 流的操作还有许多,可以参考搜索网络

再分享一下 最近根据echart图来查询数据,我在写查询语句筛选条件使用了大量的stream流,发现使用stream流是真的舒服。


我先描述我最近的一个接口:这个接口需要展示四个饼图。而四个饼图是:1.男女教师占比;2.各年龄段占比 3.学历占比,4.职称统计
我想在一个接口中完成这个四个的查询 我的思路有几个:


1.是写多个查询语句 需要一个查询一个(但是各种筛选条件下来 很麻烦)


2.利用视图 可以用来多次调用(但是在查询中会存在in操作 觉得麻烦)


3.利用stream流 根据筛选条件查出符合的教师信息 对每一个操作进行筛选


 通过各种筛选条件查出的结果: teacherList (集合类型)
Long count1 = teacherList.stream().filter(e -> e.getGender().equals(0)).count(); //男生数量
Long count2 = teacherList.stream().filter(e -> e.getGender().equals(1)).count(); //女生数量

通过这样可以直接算出数量 而不用去便利算数据


而更多详细的stream流的信息可以去网上搜索学习


我对stream流的学习还在表面 还有许多灵活的用法我还需要继续学习 欢迎大佬指导!


作者:又菜又想玩的XXX
链接:https://juejin.cn/post/7018350873130565662
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册