欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java8如何将Array转换为Stream的实现代码

程序员文章站 2022-06-14 13:44:18
引言 在 java8 中,您可以使用 arrays.stream 或 stream.of 将 array 转换为 stream。 1. 对象数组 对于对象数组...

引言

在 java8 中,您可以使用 arrays.stream 或 stream.of 将 array 转换为 stream。

1. 对象数组

对于对象数组,arrays.stream 和 stream.of 都返回相同的输出。

public static void main(string[] args) {

 objectarrays();
 }

 private static void objectarrays() {
 string[] array = {"a", "b", "c", "d", "e"};
 //arrays.stream
 stream<string> stream = arrays.stream(array);
 stream.foreach(x-> system.out.println(x));

 system.out.println("======");

 //stream.of
 stream<string> stream1 = stream.of(array);
 stream1.foreach(x-> system.out.println(x));
 }

输出:

a
b
c
d
e
======
a
b
c
d
e

查看 jdk 源码,对于对象数组,stream.of 内部调用了 arrays.stream 方法。

// arrays
public static <t> stream<t> stream(t[] array) {
 return stream(array, 0, array.length);
}

// stream
public static<t> stream<t> of(t... values) {
 return arrays.stream(values);
}

2. 基本数组

对于基本数组,arrays.stream 和 stream.of 将返回不同的输出。

public static void main(string[] args) {

 primitivearrays();
 }

private static void primitivearrays() {
 int[] intarray = {1, 2, 3, 4, 5};

 // 1. arrays.stream -> intstream
 intstream stream = arrays.stream(intarray);
 stream.foreach(x->system.out.println(x));

 system.out.println("======");

 // 2. stream.of -> stream<int[]>
 stream<int[]> temp = stream.of(intarray);

 // 不能直接输出,需要先转换为 intstream
 intstream intstream = temp.flatmaptoint(x -> arrays.stream(x));
 intstream.foreach(x-> system.out.println(x));

 }

输出:

1
2
3
4
5
======
1
2
3
4
5

查看源码,

// arrays
public static intstream stream(int[] array) {
 return stream(array, 0, array.length);
}

// stream
public static<t> stream<t> of(t t) {
 return streamsupport.stream(new streams.streambuilderimpl<>(t), false);
}

which one

  • 对于对象数组,两者都调用相同的 arrays.stream 方法
  • 对于基本数组,我更喜欢 arrays.stream,因为它返回固定的大小 intstream,更容易操作。

所以,推荐使用 arrays.stream,不需要考虑是对象数组还是基本数组,直接返回对应的流对象,操作方便。

源码见:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。