这篇文章将帮助您了解Java 8中一些重要且经常使用的Stream操作,这使您使用Java编程变得容易。

让我们以传统示例为例,“员工和部门”。

public class Employee {private String name;private Integer age;private String city;private Department department;public Employee(String name, Integer age, String city, Department department) {this.name = name;this.age = age;this.city = city;this.department = department;}// getters and setters.}
public class Department {private String departmentName;private Integer noOfEmployees;public Department(String departmentName, Integer noOfEmployees) {this.departmentName = departmentName;this.noOfEmployees = noOfEmployees;}// getters and setters
}

我将按如下所示设置一些示例数据,以便向您展示Java 8 Stream接口的一些重要功能。 我们有四个部门,以及来自这些部门的一组员工。

Department account = new Department("Account", 75); Department hr = new Department("HR", 50);Department ops = new Department("OP", 25);Department tech = new Department("Tech", 150);          List<Employee> employeeList = Arrays.asList(new  Employee("David", 32, "Matara", account), new  Employee("Brayan", 25, "Galle", hr),new  Employee("JoAnne", 45, "Negombo", ops),new  Employee("Jake", 65, "Galle", hr),new  Employee("Brent", 55, "Matara", hr),new  Employee("Allice", 23, "Matara", ops),new  Employee("Austin", 30, "Negombo", tech),new  Employee("Gerry", 29, "Matara", tech),new  Employee("Scote", 20, "Negombo", ops),new  Employee("Branden", 32, "Matara", account),new  Employee("Iflias", 31, "Galle", hr));

查找所有居住在“ Matara”城市的员工,按姓名对他们进行排序,然后打印员工的姓名。

employeeList.stream().filter(e -> e.getCity().equalsIgnoreCase("Matara")).sorted(Comparator.comparing(Employee::getName)).forEach(e -> System.out.println(e.getName()));

查找员工工作的不同部门名称。

employeeList.stream().map(e -> e.getDepartment().getDepartmentName()).distinct().forEach(System.out::println);

查找这些员工所在的部门名称,该部门的员工人数超过50。

employeeList.stream().map(Employee::getDepartment).filter(d -> d.getNoOfEmployees() > 50).distinct().forEach(d -> System.out.println(d.getDepartmentName()));

创建一个逗号分隔的部门名称字符串,按字母顺序排序。

String s = employeeList.stream().map(e -> e.getDepartment().getDepartmentName()).distinct().sorted().reduce("", (a, b) -> (a + "," + b));
System.out.println(s);

人力资源部有员工吗?

if (employeeList.stream().anyMatch(e -> e.getDepartment().getDepartmentName().equalsIgnoreCase("HR"))) { System.out.println("Found employees frm HR department");
}

打印在会计部门工作的所有雇员的姓名。

employeeList.stream().filter(e -> e.getDepartment().getDepartmentName().equalsIgnoreCase("Account")).map(Employee::getName).forEach(System.out::println);

所有部门的最高员工人数是多少?

employeeList.stream().map(e -> e.getDepartment().getNoOfEmployees()).reduce(Integer::max).ifPresent(System.out::print);

查找员工人数最多的部门。

employeeList.stream().map(Employee::getDepartment).reduce( (d1, d2) -> d1.getNoOfEmployees() > d2.getNoOfEmployees() ? d1 : d2).ifPresent(d -> System.out.println(d.getDepartmentName()));

使用max()方法可以完成以下相同操作。

employeeList.stream().map(Employee::getDepartment).max(Comparator.comparing(Department::getNoOfEmployees)).ifPresent(d -> System.out.println(d.getDepartmentName()));

查找所有部门的员工总数。

employeeList.stream().map(e -> e.getDepartment().getNoOfEmployees()).distinct().reduce(Integer::sum).ifPresent(System.out::println);

翻译自: https://www.javacodegeeks.com/2018/07/java-8-stream-examples.html

Java 8 Stream示例相关推荐

  1. java 8 stream_Java 8 Stream示例

    java 8 stream 这篇文章将帮助您了解Java 8中一些重要且经常使用的Stream操作,这使您使用Java编程变得容易. 让我们以传统示例为例,"员工和部门". pub ...

  2. Java 8 Stream中间操作(方法)示例

    Java 8 Streams中间操作的完整指南. 所有内置Stream API中间操作(方法)的列表以及示例. 1.概述 在本教程中,我们将学习什么是 Java 8 Stream 中的中间操作 . 所 ...

  3. Java 8 Stream.distinct() 列表去重示例

    Java 8 Stream.distinct() 示例 在这篇文章里,我们将提供Java8 Stream distinct()示例. distinct()返回由该流的不同元素组成的流.distinct ...

  4. java limit_Java stream.limit()用法及代码示例

    先决条件: Java8中的流 limit(long N)是java.util.stream.Stream对象的方法.此方法以一个(长N)作为参数,并返回大小不超过N的流.如果N的值很大,则limit( ...

  5. java8 group by_java8新特性Java 8 – Stream Collectors groupingBy 示例 - Java教程

    在这篇教程中,将向你展示如何使用Java 8 Stream的Collectors,来对一个List进行分组,计算个数,求和以及排序. 1. Group By, Count and Sort 1.1 对 ...

  6. 从Java 8中的java.util.stream.Stream检索列表

    本文翻译自:Retrieving a List from a java.util.stream.Stream in Java 8 I was playing around with Java 8 la ...

  7. Java Streams,第 1 部分: java.util.stream 库简介

    Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达 表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表达式本身,而是它们所实现的 ...

  8. 从底层重学 Java 之 Stream 初探 Gitchat连接

    Gitchat连接 https://gitbook.cn/gitchat/activity/5f85696aad812d16b498848c 简介 从底层,从原理,我们来重学一次 Java.Strea ...

  9. java 根据类名示例化类_Java收集器类– 18个示例

    java 根据类名示例化类 Java Collectors is a utility class that provides many useful implementations of the Co ...

最新文章

  1. Flutter 拨打电话和跳转网页
  2. 窝里斗,只给微软看笑话
  3. SAP和CRM相关的标准教材,学通了这些,就算是CRM专家了
  4. 《软件设计精要与模式》推荐序三
  5. mysql5.7用户管理
  6. 使用场景_天然气重卡使用痛点及应用场景研究
  7. -ms-flexbox_Flexbox的工作原理-用大尺寸,彩色动画gif进行解释
  8. 计算机教室电气设计规范,车库电气设计规范.docx
  9. PNG隐写入门赛 WP
  10. 计算机机房不允许开窗么,机房新风系统的设计要求及规范 你了解多少?
  11. 解决linux(centos7)重新安装mysql systemctl start mysqld.service时报错
  12. Java String 类型编码转换
  13. iPhoneXs iPhoneXs Max iPhoneXr 界面适配问题
  14. Spring - 关于IOC和DI的一些个人理解
  15. springboot整合apache ftpserver详细教程(看这一篇就够了)
  16. 什么是FDR校正,核磁共振成像中FDR校正方法有哪些?如何进行FDR校正?
  17. 网易微专业web前端开发课程视频教程分享
  18. [C++潜心修炼] 小试牛刀
  19. Brave 安全隐私浏览器
  20. android仿36氪轮播,仿36氪(附源代码)

热门文章

  1. 【DP】【高精】逆序对(jzoj 2014)
  2. 【最小环】【Floyed】观光旅游(ssl 1763)
  3. 2019.01.27【NOIP普及组】模拟赛C组总结
  4. Codeforces 786B Legacy (线段树优化建图)
  5. Dubbo(九)之注解配置
  6. 句法分析(syntactic parsing)在NLP领域的应用是怎样的
  7. 解决Html5用canvas绘制不出来图片的问题
  8. java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量
  9. MySQL的表数据复制
  10. 请用JavaScript实现一个函数,接受一-个IP白名单列表whitelist以及列表ipList