我要实现的是从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+
我认为您正在寻找minBy
和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 自 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