如何根据其对象属性值从 ArrayList 中获取 min/max?

How to get min/max from ArrayList based on its object attribute values?

我想实现的是从ArrayList<Object>中获取对象的min/max属性值。例如,如果 Object 具有属性 weight(浮动),我想要列表中最重的对象。

我试图实现 Comparable 以获得 max/min 值,但是由于某种原因,这个 returns 最小值和最大值相同。 (我不知道它是否适用于花车)

    val maxVal: Float = arrayList.max().floatVal1
    val minVal: Float = arrayList.min().floatVal1

    data class CustomObject(var val1: String, var floatVal1: Float , var floatVal2: Float?, var floatVal3: Float?, var floatVal4: Float?): Comparable<CustomObject>{
        override fun compareTo(other: CustomObject) = (floatVal1 - other.floatVal1).toInt()
    }

重复 post 中的那个具体问题没有告诉我如何根据 Float 获取 max/min 值。那就是问题所在。如果我想修改 Comparator,它只接受 Int。而且我不能使用该流功能,因为我的应用程序适用于 API 23+ 而不是 24+

我想你在找 minBy and maxBy:

 val minObject: CustomObject? = arrayList.minBy { it.floatVal1 }
 val maxObject: CustomObject? = arrayList.maxBy { it.floatVal1 }
val maxObj: Object? = arrayList.maxByOrNull { it.floatVal1 }
val minObj: Object? = arrayList.minByOrNull { it.floatVal2 }

maxBy、minBy 是 deprecated 自 Kotlin 1.4

这 return non-null 类型:

list.maxOf { it.value }
list.minOf { it.value }