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