首页 > 其他分享 >Stream流进行数组排序

Stream流进行数组排序

时间:2022-09-05 09:55:30浏览次数:64  
标签:toArray Stream int 数组 sorted IntStream 排序

​考虑一个数组:

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

相关文章

  • 数组和字符串的相互转换
      var arr = [1, 2, 3, 4];    var arr2 = arr;    var str = arr.toString(); // 将数组转换为字符串    console.log(str); // 1,2,......
  • yum安装nginx报错解决nginx: [emerg] unknown directive “stream“ in /etc/nginx/ng
    yum安装nginx,其中看nginx有stream参数,但是nginx-t是报错“nginx:[emerg]unknowndirective“stream“in/etc/nginx/nginx.conf问题”  解决办法#安装nginx源......
  • LeetCode 1387. 按幂值对整数进行排序
    LeetCode1387.按幂值对整数进行排序剛從南湖群峰下山,原本受了現在好像又胖回去了(哭[按幂值排序整数-LeetCode整数x的幂定义为使用以下步骤将x转换为1所需的......
  • 数组的基本用例
    数组的基本用例int[]arr={1,7,3,4,5};//定义一个数组遍历并打印数组内所有元素for(inti=0;i<arr.length;i++){System.out.println(arr[i]);......
  • 通过 Infinity 和 -Infinity 查找数组中最大和最小值
    functionfindMaxNum(numbers){letmax=-Infinity;for(constnofnumbers){if(n>max){max=n;}}returnmax;}functionfindMi......
  • 数组去重的几种方式
    1、利用Map数据结构去重1letarr=[1,2,3,4,3,2,3,4,6,7,6];2letunique=(arr)=>{3letseen=newMap();4returnarr.filter((item......
  • js 实现计数排序
    //计数排序//稳定性:稳定//定义一个数组,将数组中每个元素出现的次数以数组形式保存起来,数组索引值即为具体key,数组索引对应的元素值即为该索引值出现的次数//再将......
  • 十大排序算法之【插入排序】
    插入排序的原理很简单:斗地主理牌的时候怎么操作就怎么操作。最简易版代码实现:#include<bits/stdc++.h>voidinsert_sort(vector<int>&in){for(inti=0;i<in.s......
  • 数组初始化
    memset(a,false,sizeof(a));//将bool型a数组初始化为false0x3f3f3f3f//INT_MAX的一半memset(a,0x3f3f3f3f,sizeof(a));//将a数组初始化为0x3f3f3f3fmemset(a,0,sizeo......
  • 动态数组
    动态数组1.vector1.1vector说明vector是向量类型,可以容纳许多类型的数据,因此也被称为容器(可以理解为动态数组,是封装好了的类)进行vector操作前应添加头文件......