- 过滤出年龄大于 30 岁的员工,并按照年龄降序排序:
List<Employee> filteredList = employeeList.stream()
.filter(e -> e.getAge() > 30)
.sorted(Comparator.comparing(Employee::getAge).reversed())
.collect(Collectors.toList());
- 计算所有 IT 部门员工的平均年龄:
double averageAgeIT = employeeList.stream()
.filter(e -> e.getDepartment().equals("IT"))
.mapToInt(Employee::getAge)
.average()
.orElse(0.0);
- 假设我们有一个整数列表,我们想要跳过前面的几个元素并获取剩余的元素。下面是一个示例代码:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> result = numbers.stream()
.skip(5) // 跳过前面5个元素
.collect(Collectors.toList());
System.out.println(result); // 输出 [6, 7, 8, 9, 10]
reduce()
是 Java Stream API 中的一个终端操作,用于将流中的元素归约为单个结果。它接受一个 BinaryOperator 函数来定义归约操作,并可以选择性地接受一个初始值。
以下是一个详细示例,假设我们有一个整数列表,我们想要计算所有元素的总和:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用 reduce() 计算总和,初始值为0
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b);
System.out.println("总和为: " + sum);
在这个示例中,我们通过调用 reduce(0, (a, b) -> a + b)
来计算整数列表中所有元素的总和。初始值为0,BinaryOperator 函数 (a, b) -> a + b
对两个元素进行求和操作。
reduce()
方法在处理并行流时,可以接受一个 Combiner 函数,用于并行流的归约操作。Combiner 函数将多个部分结果合并为一个最终结果。以下是一个详细示例:
假设我们有一个整数列表,我们想要计算所有元素的总和,同时使用并行流来提高计算效率:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用 reduce() 计算总和,初始值为0,Combiner 函数为整数相加
int sum = numbers.parallelStream()
.reduce(0, (a, b) -> a + b, Integer::sum);
System.out.println("总和为: " + sum);
- 假设我们有一个整数列表,我们想要检查是否存在元素大于 5、是否所有元素都大于 0、以及是否没有元素小于 0:
List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 9);
// 使用 anyMatch() 检查是否存在元素大于 5
boolean anyGreaterThanFive = numbers.stream().anyMatch(num -> num > 5);
System.out.println("是否存在元素大于 5: " + anyGreaterThanFive);
// 使用 allMatch() 检查是否所有元素都大于 0
boolean allGreaterThanZero = numbers.stream().allMatch(num -> num > 0);
System.out.println("是否所有元素都大于 0: " + allGreaterThanZero);
// 使用 noneMatch() 检查是否没有元素小于 0
boolean noneLessThanZero = numbers.stream().noneMatch(num -> num < 0);
System.out.println("是否没有元素小于 0: " + noneLessThanZero);
- forEach
import java.util.Arrays;
import java.util.List;
public class StreamExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
// 使用Collection.stream()创建顺序流
names.stream()
.filter(name -> name.startsWith("A"))
.forEach(System.out::println);
// 输出将是所有以A开头的名字,这里将是:
// Alice
}
}
- map
List<String> stringList = Arrays.asList("apple", "banana", "cherry");
List<String> upperCaseList = stringList.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperCaseList); // 输出 [APPLE, BANANA, CHERRY]
- 假设我们有一个整数列表,我们想要获取这些整数的统计摘要信息,比如最大值、最小值、平均值、总和等:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
IntSummaryStatistics stats = numbers.stream()
.mapToInt(Integer::intValue)
.summaryStatistics();
System.out.println("最大值: " + stats.getMax());
System.out.println("最小值: " + stats.getMin());
System.out.println("平均值: " + stats.getAverage());
System.out.println("总和: " + stats.getSum());
System.out.println("元素个数: " + stats.getCount());