根据对象列表中的某些字段获取最小对象

时间:2018-05-16 13:47:27

标签: java android collections

我是Android开发的新手,我正在尝试找到基于3个字段从对象列表中获取最小对象的最佳方法。 我有一个对象列表,每个对象有4个字段:NameState(int值),LSeconds(int值)和USeconds(int值)。 我想首先通过State(最小状态值)得到最小对象,如果两个或多个对象具有相同的最小状态,则检查查找对象的LSeconds值,如果这些也是如果有多个对象具有相同的最小USeconds,最小State和最小LSeconds,则按USeconds进行检查,最后返回第一个对象。是否有可以自动执行此操作的功能,或者是否需要使用for

执行此操作

2 个答案:

答案 0 :(得分:4)

Java没有与您正在寻找的对象具有此排序功能。如果使用StreamSupport Java库,可以使用一种方法,如下所示:

undefined

您可以使用此lambda来应用您正在寻找的逻辑(首先检查List<YourObject> result = list.stream().sorted((ob1, ob2)-> ob1.getState(). compareTo(ob2.getState())). collect(Collectors.toList()); ,然后检查State等。)

PS:您可以使用Kotlin轻松完成此操作,例如this question

编辑:实际上,您可以使用Java 8,抱歉。 查看@mạnh-quyết-nguyễn answer

答案 1 :(得分:3)

在java 8中,您可以使用Comparator

Comparator<YourObject> comparator = Comparator.comparing(YourObject::getState)
                         .thenComparing(YourObject::getLSeconds)
                         .thenComparing(YourObject::getUSeconds);

然后您可以对列表进行排序:Collections.sort(yourList, comparator);