Java中 Stream.of() 和 Arrays.stream() 方法的区别
Arrays.stream()
Java中 Arrays 类的stream(T[] array)方法用于从作为参数传递的数组及其元素中获取顺序流。它返回一个顺序流,其中包含作为参数传递的数组元素作为其源。
例子:
// Java program to demonstrate Arrays.stream() method
import java.util.*;
import java.util.stream.*;
class GFG {
public static void main(String[] args)
{
// Creating a String array
String[] arr = { "Geeks", "for", "Geeks" };
// Using Arrays.stream() to convert
// array into Stream
Stream stream = Arrays.stream(arr);
// Displaying elements in Stream
stream.forEach(str -> System.out.print(str + " "));
}
}
流.of()
Stream of(T... values)返回一个顺序有序的流,其元素是指定的值。 Stream.of() 方法只是为非原始类型调用 Arrays.stream() 方法。
例子:
// Java code for Stream of(T... values)
// to get a sequential ordered stream whose
// elements are the specified values.
import java.util.*;
import java.util.stream.Stream;
class GFG {
// Driver code
public static void main(String[] args)
{
// Creating an Stream
Stream stream = Stream.of("Geeks", "for", "Geeks");
// Displaying the sequential ordered stream
stream.forEach(str -> System.out.print(str + " "));
}
}
这两种方法是从指定数组创建顺序流的两种最常用的方法。当使用非原始类型 T 调用时,这两种方法都返回 Stream
Arrays.stream() 和 Stream.of() 的区别
即使 Stream.of() 是 Arrays.stream() 方法的包装器,也存在某些差异点,它们清楚地表明何时使用 Arrays.stream() 或何时使用 Stream.of()。以下是上述两种方法之间的一些区别:
- 不同的返回类型:
对于原始数组(如 int[]、long[] 等),Arrays.stream() 和 Stream.of() 具有不同的返回类型。
示例:传递一个整数数组,Stream.of() 方法返回 Stream
而 Arrays.stream() 返回一个 IntStream。 // Java program to demonstrate return type // of Arrays.stream() and Stream.of() method // for primitive arrays import java.util.*; import java.util.stream.*; class GFG { public static void main(String[] args) { // Creating an integer array int arr[] = { 1, 2, 3, 4, 5 }; // --------- Using Arrays.stream() --------- // to convert int array into Stream IntStream intStream = Arrays.stream(arr); // Displaying elements in Stream intStream.forEach(str -> System.out.print(str + " ")); // --------- Using Stream.of() --------- // to convert int array into Stream Stream
stream = Stream.of(arr); // Displaying elements in Stream stream.forEach(str -> System.out.print(str + " ")); } } - Stream.of() 需要展平,而 Arrays.stream() 不需要:
用于处理原始类型流的理想类是它们的原始流类型(如 IntStream、LongStream 等)。因此 Stream.of() 需要在消费之前显式展平为其原始 Stream。
例子:
// Java program to demonstrate need of flattenning // Stream.of() method returned type for primitive arrays import java.util.*; import java.util.stream.*; class GFG { public static void main(String[] args) { // Creating an integer array int arr[] = { 1, 2, 3, 4, 5 }; // --------- Using Arrays.stream() --------- // to convert int array into Stream IntStream intStream = Arrays.stream(arr); // Displaying elements in Stream intStream.forEach(str -> System.out.print(str + " ")); // --------- Using Stream.of() --------- // to convert int array into Stream Stream
stream = Stream.of(arr); // ***** Flattening of Stream into IntStream ***** // flattenning Stream into IntStream // using flatMapToInt() IntStream intStreamNew = stream.flatMapToInt(Arrays::stream); // Displaying elements in IntStream intStreamNew.forEach(str -> System.out.print(str + " ")); } } - Stream.of() 是通用的,而 Arrays.stream 不是:
Arrays.stream() 方法仅适用于 int[]、long[] 和 double[] 类型的原始数组,并分别返回 IntStream、LongStream 和 DoubleStream。对于其他原始类型, Arrays.stream() 将不起作用。
另一方面, Stream.of() 返回 T 类型的通用 Stream (Stream)。因此,它可以与任何类型一起使用。 例子:
- 对于 Arrays.stream() 方法:
// Java program to demonstrate return type // of Arrays.stream() method // for primitive arrays of char import java.util.*; import java.util.stream.*; class GFG { public static void main(String[] args) { // Creating a character array char arr[] = { '1', '2', '3', '4', '5' }; // --------- Using Arrays.stream() --------- // This will throw error // to convert char array into Stream Arrays.stream(arr); } }
输出:
Compilation Error in java code :-
prog.java:20: error: no suitable method found for stream(char[])
Arrays.stream(arr);
^ - 对于 Stream.of() 方法:
// Java program to demonstrate return type // of Stream.of() method // for primitive arrays of char import java.util.*; import java.util.stream.*; class GFG { public static void main(String[] args) { // Creating a character array char arr[] = { '1', '2', '3', '4', '5' }; // --------- Using Stream.of() --------- // Will work efficiently // to convert int array into Stream Stream
stream = Stream.of(arr); // Displaying elements in Stream stream.forEach(str -> System.out.print(str + " ")); } }
- Stream.of() 需要展平,而 Arrays.stream() 不需要: