Java Stream API 示例 (一)

  • 过滤出年龄大于 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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值