|
Stream是Java 8引入的一种新的集合处理方式,它允许我们以一种流畅、简洁和高效的方式对集合进行处理。Stream提供了一种函数式编程风格的接口,可以非常容易地实现过滤、排序、映射和聚合等操作。在本文中,我们将探讨Stream的用法和示例,以及如何使用它来提高代码的效率和可读性。
Stream的用法
Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读。在使用Stream时,我们首先需要将集合转换为Stream对象,然后可以对这个Stream对象进行一系列操作,例如过滤、映射、排序、聚合等等,最后将结果转换回集合或者其他形式。
下面是一些常用的Stream操作:
- filter():过滤操作,用于根据某些条件过滤集合中的元素。
- map():映射操作,用于将集合中的元素映射成新的值或对象。
- sorted():排序操作,用于对集合中的元素进行排序。
- distinct():去重操作,用于去除集合中重复的元素。
- reduce():聚合操作,用于对集合中的元素进行归纳和计算。
示例
下面是一个使用Stream进行集合处理的示例:
假设我们有一个包含员工信息的集合,每个员工都有一个部门和薪水属性。我们希望对这个集合进行分组、过滤和统计操作,以便得到每个部门的平均薪水和员工数量。
首先,我们需要将集合转换为Stream对象:
List<Employee> employees = ...;
Stream<Employee> stream = employees.stream();
然后,我们可以使用filter()方法过滤掉薪水低于5000的员工:
stream = stream.filter(employee -> employee.getSalary() > 5000);
接下来,我们可以使用groupBy()方法将员工按照部门分组:
Map<String, List<Employee>> groupByDepartment = stream.collect(Collectors.groupingBy(Employee::getDepartment));
最后,我们可以使用map()方法将每个部门的员工列表转换为该部门的平均薪水和员工数量:
Map<String, Double> averageSalaryByDepartment = groupByDepartment.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().stream()
.mapToDouble(Employee::getSalary).average().orElse(0.0)));
Map<String, Integer> numberOfEmployeesByDepartment = groupByDepartment.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().size()));
这些操作可以很容易地使用Stream流实现,同时也可以提高代码的可读性和效率.
你学“废”了吗~ |
|