如何根据其对象属性值从 ArrayList 获取最小值/最大值?



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

我试图实现 Comparable 来获取最大值/最小值,但由于某种原因,这为最小值返回相同的值,为最大值返回相同的值。(我不知道它是否适用于浮子(

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()
}

重复帖子中的那个特定问题没有告诉我如何根据 Float 获取最大/最小值。这就是问题所在。如果我想修改比较器,它只接受 Int。而且我无法使用该流功能,因为我的应用程序适用于 API 23+ 而不是 24+

我认为您正在寻找minBymaxBy

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 自 Kotlin 1.4 起被弃用

这将返回非空类型:

val max = list.maxOf { it.value }
val min = list.minOf { it.value }

下面的代码返回对象列表中参数的最大值。

例如(100 是所有学生获得的最高分

list.maxOf { it.yourParameter } // Returns Max value of yourParameter value in list of objects

下面的代码返回对象列表中参数的最大值的对象。

例(得100分的学生对象

list.maxBy { it.yourParameter } // Returns Object of Max of yourParameter value in list of objects

最新更新