Java List<T>流Stream常用API详细应用场景及示例代码

发布于:2024-04-19 ⋅ 阅读:(32) ⋅ 点赞:(0)

BG

在Java 8中引入的Stream API是处理集合的新方法,它提供了一种高效、函数式的方式来处理数据。本文将详细介绍Java List 流Stream的常用API,通过具体的应用场景和详细的示例代码,帮助读者深入理解和应用这一强大的工具。


1. Stream简介

Stream API是Java 8中新增的一个抽象,它允许你以一种声明式的方式处理数据集合(如列表、数组等)。Stream提供了许多用于操作数据的高级方法,如过滤、映射、排序等。


2. 创建Stream

要使用Stream,首先需要创建一个Stream实例。可以通过以下方式创建:

  • 从集合创建:stream()方法可以将任何集合转换为Stream。
  • 使用静态方法:Stream.of()可以创建一个包含指定元素的Stream。

示例代码:

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

public class StreamExample {
    public static void main(String[] args) {
        List<User> userList = Arrays.asList(
            new User(1, "张三", 25, "男", "13800138000", "zhangsan@example.com", "管理员", LocalDateTime.now(), LocalDateTime.now(), false),
            new User(2, "李四", 30, "女", "13900139000", "lisi@example.com", "普通用户", LocalDateTime.now(), LocalDateTime.now(), false),
            new User(3, "王五", 28, "男", "13700137000", "wangwu@example.com", "普通用户", LocalDateTime.now(), LocalDateTime.now(), false)
        );
        // 从集合创建Stream
        Stream<User> streamFromList = userList.stream();
        // 使用静态方法创建Stream
        Stream<User> streamFromStatic = Stream.of(userList.toArray(new User[0]));
    }
}

3. 中间操作

中间操作是对Stream进行的一系列数据处理操作,如过滤、映射、排序等。这些操作会返回一个新的Stream,以便进行链式调用。

3.1 根据createTime倒序排序

sorted()方法用于对Stream中的元素进行排序。可以传入一个Comparator参数来自定义排序规则。

示例代码:

Stream<User> sortedByCreateTimeDesc = userList.stream().sorted(Comparator.comparing(User::getCreateTime).reversed());

3.2 根据age倒序排序

sorted()方法用于对Stream中的元素进行排序。可以传入一个Comparator参数来自定义排序规则。

示例代码:

Stream<User> sortedByAgeDesc = userList.stream().sorted(Comparator.comparingInt(User::getAge).reversed());

3.3 role条件查询

filter()方法用于根据条件过滤元素。它接受一个Predicate参数,用于判断元素是否满足条件。

示例代码:

Stream<User> filteredByRole = userList.stream().filter(user -> user.getRole().equals("管理员"));

3.4 获取sex为female的list集合

filter()方法用于根据条件过滤元素。它接受一个Predicate参数,用于判断元素是否满足条件。

示例代码:

List<User> femaleUsers = userList.stream().filter(user -> user.getSex().equals("女")).collect(Collectors.toList());

3.5 模糊查询phone中为155的list集合

filter()方法用于根据条件过滤元素。它接受一个Predicate参数,用于判断元素是否满足条件。

示例代码:

List<User> phoneContains155 = userList.stream().filter(user -> user.getPhone().contains("155")).collect(Collectors.toList());

4. 终止操作

终止操作是对Stream进行的最后一步操作,它会返回一个结果或者产生一个副作用。常见的终止操作有:forEach()reduce()collect()等。

4.1 遍历

forEach()方法用于遍历Stream中的元素。它接受一个Consumer参数,用于定义对每个元素的操作。

示例代码:

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

4.2 归约

reduce()方法用于将Stream中的元素归约为一个值。它接受一个BinaryOperator参数,用于定义归约规则。

示例代码:

Optional<Integer> sumOfIds = userList.stream().map(User::getId).reduce((a, b) -> a + b);

4.3 收集

collect()方法用于将Stream中的元素收集到一个集合中。它接受一个Collector参数,用于定义收集规则。

示例代码:

List<User> adminList = userList.stream().filter(user -> user.getRole().equals("管理员")).collect(Collectors.toList());

5. 组合操作

可以将多个中间操作和终止操作组合在一起,形成一个完整的数据处理流程。例如:

List<User> sortedAdminList = userList.stream()
    .filter(user -> user.getRole().equals("管理员"))
    .sorted(Comparator.comparing(User::getId))
    .collect(Collectors.toList());

6. 总结

Java List流Stream的常用API来处理集合数据,能够极大提高代码的简洁性和可读性。


每日一笑

为什么程序员喜欢用黑色背景?因为白天黑夜对他们来说没区别。😂
为什么程序员喜欢递归?因为它让他们感到深度。😂
为什么程序员喜欢Linux?因为它有很多开源的爱。😂

编程就像攀登一座高山,不要害怕困难和挑战。只要你坚持不懈,不断学习和进步,最终你会到达山顶。加油!


END