代码之家  ›  专栏  ›  技术社区  ›  Martin

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

  •  0
  • Martin  · 技术社区  · 6 年前

    我想要实现的是从中获取对象的最小/最大属性值 ArrayList<Object> . 例如,如果 Object 具有属性 weight (浮子),我要名单上最重的东西。

    我试着实现Comparable以获得max/min值,但由于某些原因,这会返回相同的min值和max值(我不知道它是否适用于浮动)

        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获得max/min值。这就是问题所在。如果我想修改比较器,它只接受Int。我不能使用流功能,因为我的应用程序是为API 23+不是24+

    1 回复  |  直到 6 年前
        1
  •  17
  •   zsmb13    6 年前

    minBy maxBy :

     val minObject: CustomObject? = arrayList.minBy { it.floatVal1 }
     val maxObject: CustomObject? = arrayList.maxBy { it.floatVal1 }
    
        2
  •  3
  •   ajw    4 年前
    val maxObj: Object? = arrayList.maxByOrNull { it.floatVal1 }
    val minObj: Object? = arrayList.minByOrNull { it.floatVal2 }
    

    deprecated