阅读 1242

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流的学习还在表面 还有许多灵活的用法我还需要继续学习 欢迎大佬指导!

文章分类
后端
文章标签