考虑一个数组:
int[] nums = {9,6,5,7,4,8,3,1,2};
对于数组,列举几个转换Stream流的操作及返回值:
//返回Stream对象,但泛型为int[]数组
Stream<int[]> nums1 = Stream.of(nums);
//返回一个IntStream对象,默认无泛型
IntStream nums2 = IntStream.of(nums);
IntStream nums3 = Arrays.stream(nums);
若想要对数组进行排序,则使用sorted()方法,但需要注意的是,IntStream的sorted无入参,即只能自然排序,只有Stream中的sorted才能指定比较器,所以将之转化为Stream类型,再进行排序:
//使用boxed()将IntStream转换为Stream类型,即将IntStream中的每个整型都进行装箱
//nums2同理
Stream<Integer> boxedNums = nums3.boxed();
//进行排序
Stream<Integer> sortedNums = boxedNums.sorted((o1,o2) -> o2-o1);
排序完成后,仍是一个Stream对象。若想将之转换回数组,则使用toArray()方法
但仍然需要注意,在Stream中,由于Stream的泛用性,toArray()返回的是Object类型的数组,而非int类型,所以,需要首先转化为IntStream,表示其中存储的都是整型数据,然后使用该对象中的toArray()方法:
//使用mapToInt转化为IntStream对象
//此处的intValue是将原本的Integer包装类转换为int基本类
IntStream temp = sortedNums.mapToInt(Integer::intValue);
//最终转换为数组
int[] res = temp.toArray();
以下总结前文提到的Stream和IntStream的同名方法及必要说明,方便判断是否需要进行对象类型的转换:
Stream:
- Stream<T> of(T t):返回一个Stream对象,其泛型是参数泛型
- Stream sorted():可带参可不带参
- Object[] toArray():返回一个Obj的数组
IntStream:
- IntStream of(int... values):返回一个IntStream对象,直接存有数组每个元素
- IntStream sorted():只有无参的
- int[] toArray():返回一个int的数组
此外,Arrays.stream()也能返回一个IntStream对象,效果与IntStream.of()一致,且其针对数据数组有更多重载,泛用性更强
标签:toArray,Stream,int,数组,sorted,IntStream,排序 From: https://www.cnblogs.com/FICN/p/16657031.html