Reputation: 2914
What I want to achieve is to get min/max attribute value of object from ArrayList<Object>
. For example if Object
has attribute weight
(float), I want heaviest object from the list.
I've tried to implement Comparable to get max/min value but this returns same value for min and same for max for some reason. (I don't know if it works with floats)
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()
}
That specific question from duplicate post does not show me how to get max/min value based on Float. That's the problem. If I want to modify Comparator it accepts only Int. And i cant use that stream feature because my app is for API 23+ not 24+
Upvotes: 23
Views: 22925
Reputation: 648
This return non-null types:
val max = list.maxOf { it.value }
val min = list.minOf { it.value }
Upvotes: 4
Reputation: 2742
Below Code returns Max value of your parameter in list of objects.
Ex)100 is max marks obtained all students
list.maxOf { it.yourParameter } // Returns Max value of yourParameter value in list of objects
Below Code returns Object of Max value of your parameter in list of objects.
Ex)Student object who got 100 marks
list.maxBy { it.yourParameter } // Returns Object of Max of yourParameter value in list of objects
Upvotes: 1
Reputation: 2702
val maxObj: Object? = arrayList.maxByOrNull { it.floatVal1 }
val minObj: Object? = arrayList.minByOrNull { it.floatVal2 }
maxBy, minBy are deprecated since Kotlin 1.4
Upvotes: 21