Java进阶DAY26-01-初爽Stream流
引言
在Java的世界中,Stream流是处理集合对象的一个强大工具,它可以让我们以声明式的方式处理数据集合。Stream API在Java 8中被引入,提供了一种高效且简洁的方式来操作数据。通过Stream流,我们可以实现对数据的筛选、排序、映射、归约等操作,而这一切都可以以非常直观且链式的方式完成。今天,我们就来初探Stream流的魅力。
Stream流的创建
在深入了解Stream流之前,首先需要知道如何创建一个Stream。Stream流可以通过多种方式创建,下面是一些常见的创建方式:
从集合创建
几乎所有的集合类都提供了stream()
方法,通过这个方法可以直接获取到对应集合的Stream对象。
Integer[] numbers = {1, 2, 3, 4, 5};
Stream<Integer> numberStream = Arrays.stream(numbers);
List<String> list = Arrays.asList("Apple", "Banana", "Cherry", "Date");
Stream<String> stream = list.stream();
从数组创建
使用Arrays.stream(Object[])
方法,可以从数组直接创建一个Stream。
Integer[] numbers = {1, 2, 3, 4, 5};
Stream<Integer> numberStream = Arrays.stream(numbers);
Stream.of方法
通过Stream.of()
方法,可以直接传入多个对象创建Stream。
Stream<Integer> numberStream = Stream.of(1, 2, 3, 4, 5);
Stream流的操作
Stream流的操作大致可以分为中间操作和终端操作两种。中间操作会返回一个新的Stream,可以与其他操作链式调用;终端操作则会结束流的操作,并产生结果。
中间操作
filter(Predicate<T>)
:过滤,根据条件排除某些元素。map(Function<T, R>)
:映射,将元素转换成其他形式或提取信息。sorted()
:排序,按自然顺序或自定义Comparator排序。
终端操作
forEach(Consumer<T>)
:迭代流中的每个数据。collect(Collectors)
:转换成其他形式的数据结构。reduce(BinaryOperator<T>)
:归约,将流中元素反复结合起来,得到一个值。
实战演练
让我们通过一个实际的例子来感受Stream流的魅力。假设我们有一个用户列表,现在我们想要筛选出年龄大于18的用户,并按年龄升序排序。
List<User> users = Arrays.asList(
new User("Alice", 20),
new User("Bob", 17),
new User("Charlie", 22),
new User("Dave", 15)
);
List<User> filteredUsers = users.stream()
.filter(user -> user.getAge() > 18)
.sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
filteredUsers.forEach(user -> System.out.println(user.getName()));
结语
Stream流是Java 8中引入的一个强大的API,它以一种声明式的方式让集合操作变得更加简洁和灵活。通过本篇的介绍,希望你能对Stream流有一个初步的了解,并在实际开发中能够运用起来。Stream流的学习是一个循序渐进的过程,今天我们只是初探了Stream流,后续还有更多强大功能等着我们去发现和学习。