这篇文章将帮助您了解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. 成功从小公司跳槽!35岁的程序员被裁
  2. [工具]-电脑磁盘爆满了,但又不知道哪些文件占用的空间,怎么办?
  3. github常见操作和常见错误!错误提示:fatal: remote origin already exists.
  4. hdu - 1827 Summer Holiday (强连通)
  5. 纯CSS实现iframe高度自适应,完美兼容各种浏览器,同域异域
  6. <script>放在head内和body内有什么区别
  7. python后端框架flask_Vue+Flask轻量级前端、后端框架,如何完美同步开发
  8. 百度云盘云知梦php_教你搭建私有云盘,简单快速,完全傻瓜式!不限速,永久有效!...
  9. 计算机组成与体系结构(软件设计师备考笔记)
  10. Linux开发环境搭建与使用——Linux简史
  11. iphone 文件夹连接服务器 百度云,iPhone与电脑共享文件夹
  12. 服务器vmx 文件,ISO,虚拟机,VMware,VMX文件和VMDK文件之间的关系
  13. python生成带照片的二维码图片_Python生成带文字的二维码
  14. 使用gca警告: Calling gca() with keyword arguments was deprecated in Matplotlib 3.4.
  15. 使用Fragment和ListView、RecyclerV实现动物信息显示
  16. Go chan基础1
  17. IGRP和EIGRP为什么是距离矢量协议
  18. opencv图像旋转和翻转,cv2.flip,cv2.rotate
  19. 【原创】如何装电脑固态硬盘——拯救者ISK15.6为例
  20. 阿德莱德大学计算机专业本科几年,阿德莱德大学工程本科学制

热门文章

  1. 【LCT】城市旅行(luogu 4842/金牌导航 LCT-3)
  2. Sentinel(十二)之实时监控
  3. 干货 | 彻底弄懂 HTTP 缓存机制及原理
  4. java-- properties总结
  5. ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: N O)
  6. Photoshop图像修饰工具
  7. SpringMVC中使用作用域对象完成数据的流转
  8. JS函数中的arguments
  9. 防止properties乱码配置---SpringBoot
  10. JavaWeb前端之AJAX的初步学习