Arrays.stream()的用法
Arrays.stream()
,这个方法适用于把数组转换成stream然后方便对其进行stream的一系列处理。
比如:
Object[] objects= new Object[1]; Arrays.stream(objects).collect(Collectors.toList());
但是当数组为基础类型时,这样做不行。
int[] ints = new int[1];
Arrays.stream(ints).collect(Collectors.toList());
因为Arrays.stream其实是一个重载函数,他一共有四种
仅能接受四种数组,
int[]
,long[]
,double[]
,T[]
也就是说其他基础类型的数组比如 boolean[]
也不能使用Arrays.stream()
进行封装。
基础类型和对象类型数组使用时的区别
当用Arrays.stream()
进行封装时,基础类型和对象类型数组是有区别的。具体区别,以int[]为例,如图所示:
T[]
Arrays.stream(int[])
返回的是IntStream
而不是Stream<T>
。这也导致了由这两种数组返回的Stream其实在用法上有所区别。
用法上的区别
IntStream
其实是专门用于数值计算的Stream,他提供了一些很好用的方法,比如:
- sum()
- max()
- min()
- average()
这些方法方便我们更好的计算。
举个例子:
Integer[] integers = new Integer[10];
for (int i = 0; i <10 ; i++) {
ints[i] = i;
integers[i] = i;
}
int sum1 = Arrays.stream(integers).reduce(0, (a, b) -> a + b);
int sum2 = Arrays.stream(ints).sum();
System.out.println(sum1);
System.out.println(sum2);
Stream
显然对数值的处理显得比较繁琐,而IntStream
就简单的多。
如何互相转换
其实IntStream
和Stream
完全可以互相转换,其转换方式如下所示。
IntStream intStream = Arrays.stream(integers).mapToInt(e -> e);
Stream<Integer> stream = Arrays.stream(ints).boxed();
同理,double,long也有对应的方法。
网友评论