我们知道,原始类型在java中不是对象,因为在stream()类中有重载的Arraysmethod。假设这里只考虑int。如果我们通过int[]然后stream(int[] array)被调用并返回IntStream对象。如果你去查看IntStream类,那么你将只找到一个toArraymethod,它不接受任何参数。
所以,我们不能做toArray(int[]::new)。
int[] in1 = {0, 0, 2, 0, 3};
int[] in2 = Arrays.stream(in1).filter(x -> x != 0).toArray();
但是对于任何Reference类型数组,我们都可以转换为特定类型。例如
String[] str2 = {"a","b",null,"c"};
String[] strArr = Arrays.stream(str2).filter(i -> !=null).toArray(String[]::new);
for (String string : strArr) {
System.out.println(string);
}
在Reference类型的情况下,从stream类调用通用Arrays方法并生成Stream,现在Stream接口有两个重载的toArray()。如果我们使用
toArray()然后屈服Object[],在这种情况下,我们需要种姓。
toArray(IntFunction generator)然后给我们A[],其中A是任何参考类型。
见下面的例子
package test;
import java.util.Arrays;
public class EliminateZeroFromIntArray {
public static void main(String[] args) {
int[] in1 = {0, 0, 2, 0, 3};
int[] in2 = Arrays.stream(in1).filter(x -> x != 0).toArray();
for (int i : in2) {
System.out.println(i);
}
String[] str = {"a","b",null,"c"};
Object[] array = Arrays.stream(str).filter(i -> i !=null).toArray();
for (Object object : array) {
System.out.println((String)object);
}
String[] str2 = {"a","b",null,"c"};
String[] strArr = Arrays.stream(str2).filter(i -> i !=null).toArray(String[]::new);
for (String string : strArr) {
System.out.println(string);
}
}
}