Java 中 Stream 的用法详解


Stream 是 Java 8 引入的一个重要特性,用于处理集合数据。Stream 提供了一种声明式的方式来处理数据,使得代码更加简洁和易读。下面将详细介绍 Stream 的基本用法,并通过一个示例来说明如何使用 Stream 过滤出年龄大于三岁的对象。
1. 创建 Stream
Stream 可以通过多种方式创建:
从集合创建:

  List<String> list = Arrays.asList("apple", "banana", "cherry");
  Stream<String> stream = list.stream();
  

从数组创建:

  String[] array = {"apple", "banana", "cherry"};
  Stream<String> stream = Arrays.stream(array);
  

从值创建:

  Stream<String> stream = Stream.of("apple", "banana", "cherry");
  

生成无限流:

  Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1);
  

2. 中间操作
中间操作不会立即执行,而是返回一个新的 Stream,直到终端操作被调用时才会执行。
过滤:

  Stream<String> filteredStream = stream.filter(s -> s.startsWith("a"));
  

映射:

  Stream<String> mappedStream = stream.map(String::toUpperCase);
  

排序:

  Stream<String> sortedStream = stream.sorted();
  

去重:

  Stream<String> distinctStream = stream.distinct();
  

限制和跳过:

  Stream<String> limitedStream = stream.limit(2);
  Stream<String> skippedStream = stream.skip(2);
  

3. 终端操作
终端操作会触发中间操作的执行,并产生最终结果。
收集到集合:

  List<String> resultList = stream.collect(Collectors.toList());
  

查找第一个元素:

  Optional<String> firstElement = stream.findFirst();
  

查找任意元素:

  Optional<String> anyElement = stream.findAny();
  

计算总和:

  int sum = stream.mapToInt(Integer::intValue).sum();
  

遍历:

  stream.forEach(System.out::println);
  

4. 示例:过滤年龄大于三岁的对象
假设我们有一个 Person 类和一个包含多个 Person 对象的列表,我们希望过滤出年龄大于三岁的对象。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("Alice", 5),
            new Person("Bob", 2),
            new Person("Charlie", 7),
            new Person("David", 3)
        );

        // 使用 Stream 过滤出年龄大于三岁的对象
        List<Person> threeYearAbove = people.stream()
            .filter(person -> person.getAge() > 3)
            .collect(Collectors.toList());

        // 打印结果
        threeYearAbove.forEach(System.out::println);
    }
}

输出

Person{name='Alice', age=5}
Person{name='Charlie', age=7}

总结
Stream 是 Java 8 引入的一个强大工具,可以简化集合数据的处理。通过链式调用中间操作和终端操作,可以编写出简洁、高效的代码。上述示例展示了如何使用 Stream 过滤出符合条件的对象,并将其收集到新的列表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值