Java 中 Stream 的中间操作
在 Java 中,流允许我们对指定元素执行函数式操作。它简单地将源元素(例如数组、文件和集合框架类)通过各种内置方法传递,以返回结果。这些内置方法可以是中间操作或终端操作。在本文中,我们将探讨 Stream 的一些中间操作方法,例如 map、filter、reduce 和 collect。这些方法可以帮助我们操作和处理数据。
Java 流的中间操作
Java 流的方法统称为高阶函数,进一步分为:
中间操作 - 它们处理输入流的元素。
终端操作 - 它们触发中间操作以产生非流结果,例如打印、计数和存储。
在本节中,我们将仅通过各种示例讨论流的中间操作。
Java 中流的中间操作列表:
filter()
map()
peek()
limit()
skip()
sorted()
distinct()
让我们逐一讨论它们。
filter() 方法
Java filter() 方法允许我们根据指定的条件筛选流的元素。它用于对流项应用某种行为。此方法将谓词作为参数,并返回与谓词匹配的元素列表。
语法
filter(predicate);
示例
以下示例说明了 filter() 方法的使用。
使用 Arrays.asList() 方法创建一个列表以存储固定大小的列表。
现在,使用 filter() 方法以及 stream() 和 forEach() 仅筛选出奇数。这里,stream() 指定以流的形式输入,我们将使用终端方法 forEach() 来迭代和打印奇数。
import java.util.*;
public class Fltr {
public static void main(String[] args) {
// creating a list of numbers
List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
// printing all numbers in the list
System.out.println("List of all numbers: " + numbers);
System.out.println("List of odd numbers: ");
// filtering only odd numbers from list
numbers.stream()
.filter(nums -> nums % 2 == 1)
.forEach(System.out::println);
}
}
输出
List of all numbers: [5, 21, 32, 14, 63, 19, 10] List of odd numbers: 5 21 63 19
map() 方法
此方法将 Function 作为参数,并将其应用于 Stream 的每个元素,这将产生一个新的映射元素的 Stream。例如,我们可以使用 map() 将字符串 Stream 转换为整数 Stream。
示例
在此示例中,我们将使用 map() 方法将一个列表的元素复制到另一个列表。
import java.util.*;
import java.util.stream.Collectors;
public class MapExample {
public static void main(String[] args) {
// creating a list of integers
List<Integer> AList1 = Arrays.asList(11, 22, 33, 44, 55);
// to copy elements of first list to new list
List<Integer> AList2 = AList1.stream()
// copying the elements
.map(i -> i)
// collecting the result
.collect(Collectors.toList());
// Printing the result
System.out.println("The elements of the list: " + AList2);
}
}
输出
The elements of the list: [11, 22, 33, 44, 55]
peek() 方法
我们可以使用 peek() 方法打印每个中间操作的结果。
示例
在以下示例中,我们将使用 filter() 方法以及 peek() 打印数字列表中的奇数。
import java.util.*;
import java.util.stream.Collectors;
public class PeekExample {
public static void main(String[] args) {
// creating a list of numbers
List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
// printing all numbers in the list
System.out.println("List of all numbers: " + numbers);
System.out.println("List of odd numbers: ");
// filtering only odd numbers from list
numbers.stream()
.filter(nums -> nums % 2 == 1)
// using peek to get the result
.peek(nums -> System.out.println(nums))
// collecting the result
.collect(Collectors.toList());
}
}
输出
List of all numbers: [5, 21, 32, 14, 63, 19, 10] List of odd numbers: 5 21 63 19
limit() 方法
使用 limit() 方法的目的是将输出的大小限制为指定的限制。
示例
在此示例中,我们将使用 limit() 方法将中间操作的结果限制为指定的大小。
import java.util.*;
public class LimitExample {
public static void main(String[] args) {
// creating a list of numbers
List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
// printing all numbers in the list
System.out.println("List of all numbers: " + numbers);
System.out.println("List of odd numbers: ");
// filtering only odd numbers from list
numbers.stream()
.filter(nums -> nums % 2 == 1)
// limiting the result to 2 only
.limit(2)
.forEach(System.out::println);
}
}
输出
List of all numbers: [5, 21, 32, 14, 63, 19, 10] List of odd numbers: 5 21
skip() 方法
我们可以使用 skip() 方法丢弃结果中的前 n 个元素。它将一个整数作为参数,该参数指定将被丢弃的元素。
示例
以下示例演示了如何使用 skip() 方法丢弃筛选结果中的前两个元素。
import java.util.*;
public class SkipExample {
public static void main(String[] args) {
// creating a list of numbers
List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
// printing all numbers in the list
System.out.println("List of all numbers: " + numbers);
System.out.println("List of odd numbers: ");
// filtering only odd numbers from list
numbers.stream()
.filter(nums -> nums % 2 == 1)
// skipping first 2 elements from the result
.skip(2)
.forEach(System.out::println);
}
}
输出
List of all numbers: [5, 21, 32, 14, 63, 19, 10] List of odd numbers: 63 19
sorted() 方法
此方法可用于按升序对流的元素进行排序。
示例
以下示例说明了如何使用 sorted() 方法按升序对流的元素进行排序。
import java.util.*;
public class SortedExample {
public static void main(String[] args) {
// creating a list of numbers
List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
// printing all numbers from the list in ascending order
System.out.println("List of numbers: ");
// Sorting the elements of list
numbers.stream()
.sorted()
.forEach(System.out::println);
}
}
输出
List of numbers: 5 10 14 19 21 32 63
distinct() 方法
要删除流元素中的重复项,我们可以使用 distinct() 方法。
示例
在此示例中,我们将创建一个包含重复元素的流,并应用 distinct() 方法仅打印唯一元素。
import java.util.*;
public class DistinctExample {
public static void main(String[] args) {
// creating a list of numbers
List<Integer> numbers = Arrays.asList(21, 21, 32, 14, 19, 19, 10, 10);
System.out.println("Distinct list of numbers: ");
// removing duplicate numbers from the list
numbers.stream()
.distinct()
.forEach(System.out::println);
}
}
输出
Distinct list of numbers: 21 32 14 19 10
结论
我们从定义流及其作为 Java 中高阶函数一部分的中间操作开始本文。在下一节中,我们借助示例程序详细讨论了中间操作方法。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP