首页 > 其他分享 >Kotlin 集合对象的单条件和多条件排序

Kotlin 集合对象的单条件和多条件排序

时间:2023-06-14 22:56:35浏览次数:47  
标签:25 val Author Kotlin Person 条件 排序

原文: Kotlin 集合对象的单条件和多条件排序 - Stars-One的杂货小窝

本文不是太难的东西,因为sortedWith之前没怎么用过,所以就记录下

平常开发经常使用到List,Map等数据集合类型,也会经常遇到排序的问题,可以直接使用sortedBysortedByDescending排序

多条件则是使用sortedWith,具体使用用例看见下文

单条件排序

方便起见,我们创建一个类Author,用来保存数据

data class Author(val name:String,val age:Int,val height:Int)
val authorList = listOf(
    Author("John", 30, 175),
    Author("Alice", 25, 165),
    Author("Bob", 25, 180),
    Author("John1", 25, 180),
    Author("Alice1", 30, 170)
)

authorList.sortedByDescending {
    it.age
}

多条件排序

实际上,kotlin里提供了compareBy方法,方便开发者快速创建一个比较器的对象

val personList = listOf(
    Person("John", 30, 175),
    Person("Alice", 25, 165),
    Person("Bob", 25, 180),
    Person("John", 25, 180),
    Person("Alice", 30, 170)
)

val sortedList = personList.sortedWith(compareBy(
    { it.name }, // 按姓名升序
    { -it.age }, // 按年龄降序
    { it.height } // 按身高升序
))

sortedList.forEach { println(it) }

compareBy方法介绍:

compareBy 是 Kotlin 标准库提供的一个函数,它可以帮助我们创建排序条件。该函数接收一个或多个 lambda 表达式,每个 lambda 表示一个排序条件。

compareBy 函数的返回值是一个 Comparator 对象,可以用于对集合中的元素进行排序。使用这个函数的好处是,可以将多个排序条件组合在一起,并且可以方便地扩展排序条件,而不必改变排序算法的实现。

标签:25,val,Author,Kotlin,Person,条件,排序
From: https://www.cnblogs.com/stars-one/p/17481055.html

相关文章

  • mongo聚合字符串类型的数字进行排序
    设置collationCollationcollation=Collation.of(Locale.CHINESE).numericOrdering(true);设置聚合选项Aggregationaggregation=Aggregation.newAggregation(Aggregation.match(orOperator),).withOptions(AggregationO......
  • 数据结构和算法——二叉排序树
    一、二叉排序树对于无序的序列“62,58,88,47,73,99,35,51,93,29,37,49,56,36,48,50”,是否存在一种高效的查找方案,使得能够快速判断在序列中是否存在指定的数值?二叉排序树是一种简单,高效的数据结构。二叉排序树,又称为二叉查找树。二叉排序树或者是一棵空树,或者是具有以下性质的二叉树:若其左子树不为......
  • C/C++——排序
    在C/C++中的排序,使用到的函数主要有:sort()qsort()下面详细分析sort()函数和qsort()函数。1、sort()函数sort()是STL中提供的算法,头文件为:#include<algorithm>usingnamespacestd;函数原型如下:template<classRandomAccessIterator>voidsort(RandomAccessIteratorfirst,Ran......
  • JS排序:插入排序 冒泡排序 选择排序
    1.插入排序 1letarr=[30,5,7,60,22,18,29]2letfn=arr=>{3for(letj=1;j<arr.length;j++){4letcurrent=arr[j]5letpreIdx=j-16while(preIdx>=0&&arr[preIdx]>......
  • 操作系统(3.6.2)--破坏“不可抢占”条件
    系统规定进程是逐个地提出对资源的要求的。当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请。这种方法实现起来比较复杂且要付出很大的代价。这种策略还可能因为反复地申请和释放资源,致使进程的执行被......
  • 快速排序以及 TopN 问题
    快速排序快速排序的划分函数1.firstelement划分2.medianofthreeelement划分快速排序的稳定性TopN问题Referencehttps://baobaobear.github.io/post/20191007-qsort-talk-1/......
  • C# 获取数组排序后的下标
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApp9{classProgram{staticvoidMain(string[]args){int[]src=newint[]{2,1......
  • 算法面试:单向链表节点的奇偶排序。
    给定一个单项链表,要求实现一个算法,把链表分成两部分,前一部分全是下标为偶数的节点,后一部分全是下标为奇数的节点,例如给定链表为下图的第一个队列,要求编写一个算法,将链表转换为第二个队列:要求算法不能分配多余的内存,同时,在操作链表是,不能更改节点内部的内容,只能更改节点的next指针......
  • 面试算法:波浪型数组的快速排序法
    波浪型数组是具备这样特性的数组,它的元素先是递增,到达某个点后开始低贱,接着达到某个点时又递增,接着右递减,以下数组就是一个波浪型数组:A:57,131,493,294,221,339,418,452,442,190A[0]A[1]A[2]A[3]A[4]A[5]A[6],A[7],A[8],A[9]不难发现,A[0]-A[4]是一个波浪,因为......
  • 考前复习——拓扑排序
    拓扑排序要解决的问题是给一个图的所有节点排序在一个DAG(有向无环图)中,我们将图中的顶点以线性方式进行排序,使得对于任何的顶点u到v的有向边(u,v),都可以有u在v的前面。注:有环的图无法给出拓扑排序因此也可以用这个性质判断图有无环intn,m;intin[N],out[N];/......