Java List流Stream常用API详细应用场景及示例代码
- 1. Stream简介
- 2. 创建Stream
- 示例代码:
- 3. 中间操作
- 3.1 根据createTime倒序排序
- 示例代码:
- 3.2 根据age倒序排序
- 示例代码:
- 3.3 role条件查询
- 示例代码:
- 3.4 获取sex为female的list集合
- 示例代码:
- 3.5 模糊查询phone中为155的list集合
- 示例代码:
- 4. 终止操作
- 4.1 遍历
- 示例代码:
- 4.2 归约
- 示例代码:
- 4.3 收集
- 示例代码:
- 5. 组合操作
- 6. 总结
在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));// 从集合创建StreamStream<User> streamFromList = userList.stream();// 使用静态方法创建StreamStream<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