简体   繁体   English

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

[英]Get Minimum object based on some fields from a List of objects

I'm new in Android development and I'm trying to find the best way to get the minimum object from the object list based on 3 fields. 我是Android开发的新手,我正在尝试找到基于3个字段从对象列表中获取最小对象的最佳方法。 I have an object list, each object having 4 fields: Name , State (int value), LSeconds (int value) and USeconds (int value). 我有一个对象列表,每个对象有4个字段: NameState (int value), LSeconds (int value)和USeconds (int value)。 I want to get the minimum object based first by State (minimum State value) and if two or more objects have the same minimum state to check the LSeconds value for the find objects and if those are also the same to check by USeconds and in the end to return the first one if there are more than one object with the same minimum State , minimum LSeconds and minimum USeconds . 我希望首先通过State获取最小对象(最小状态值),如果两个或多个对象具有相同的最小状态,则检查查找对象的LSeconds值,如果这些也是相同的, USeconds检查并且在如果有多个具有相同最小State对象,最小LSeconds和最小USeconds ,则返回第一个。 Is there a function that can do this automatically or do I need to do it by using the for ? 是否有一个可以自动执行此操作的功能,或者我是否需要通过使用for来执行此操作?

Java doesn't have this sort function with objects you're looking for. Java没有与您正在寻找的对象具有此排序功能。 If you use StreamSupport Java library though, there's a method you can use, something like this: 如果您使用StreamSupport Java库,可以使用一种方法,如下所示:

List<YourObject> result = list.stream().sorted((ob1, ob2)-> ob1.getState().
                               compareTo(ob2.getState())).
                               collect(Collectors.toList());

You can work with this lambda to apply the logic you're looking for (check State first, then LSeconds , etc..) 您可以使用此lambda来应用您正在寻找的逻辑(首先检查State ,然后检查LSeconds等。)

PS: you can do this easily with Kotlin, like in this question PS:你可以像Kotlin一样轻松地做到这一点,就像这个问题一样

EDIT : Actually, you can with Java 8, sorry. 编辑 :其实,你可以用Java 8,抱歉。 Check @mạnh-quyết-nguyễn answer . 检查@mạnh-quyết-nguyễn的 答案

In java 8 you can use Comparator : 在java 8中,您可以使用Comparator

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

Then you can sort your list: Collections.sort(yourList, comparator); 然后你可以对列表进行排序: Collections.sort(yourList, comparator);

获取 Map <string, list<object> &gt; 从列表<object>其中键是对象的字段之一<div id="text_translate"><p>我有一个 object 如下</p><pre>public class Model { private String key; private String data1; private String data2; private String data3; // getters }</pre><p> 这些模型的列表正在通过数据层返回。 现在我想创建一个Map&lt;String, List&lt;Model&gt;&gt; ,其键是Model class 中的“键”字段。 有多个具有不同数据值的重复“键”。 我有以下现有解决方案,但需要一种更简单更好的方法。 没有广泛使用 Java 8 所以对大多数方法不太熟悉,并且由于我没有时间研究而需要尽快解决。</p><pre> List&lt;Model&gt; models = modelRepo.getAllModels(); Set&lt;String&gt; keys = models.stream().map(Model::getKey).collect(Collectors.toSet()); Map&lt;String, List&lt;Model&gt;&gt; result = new HashMap&lt;&gt;(); keys.stream().forEach(key -&gt; { List&lt;Model&gt; modelList = new ArrayList&lt;&gt;(); models.stream().forEach(model -&gt; { if (model.getKey().equals(key)) { modelList.add(model); } }); result.put(key, modelList); });</pre></div></object></string,> - Get Map<String, List<Object>> from List<Object> where the key is one of the fields of the objects

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 根据 object 中的变量从对象列表中获取对象 - Get objects from List of objects based on variable in object 从对象列表中获取最小值和最大值 - Get minimum and maximum from a list of objects 当对象列表中的另一个字段最小时,Java 8获取对象字段 - Java 8 get a field of object when another field is minimum from a list of objects 对象列表 - 获取对象字段的不同计数 - List of objects - get object fields distinct count 获取 Map <string, list<object> &gt; 从列表<object>其中键是对象的字段之一<div id="text_translate"><p>我有一个 object 如下</p><pre>public class Model { private String key; private String data1; private String data2; private String data3; // getters }</pre><p> 这些模型的列表正在通过数据层返回。 现在我想创建一个Map&lt;String, List&lt;Model&gt;&gt; ,其键是Model class 中的“键”字段。 有多个具有不同数据值的重复“键”。 我有以下现有解决方案,但需要一种更简单更好的方法。 没有广泛使用 Java 8 所以对大多数方法不太熟悉,并且由于我没有时间研究而需要尽快解决。</p><pre> List&lt;Model&gt; models = modelRepo.getAllModels(); Set&lt;String&gt; keys = models.stream().map(Model::getKey).collect(Collectors.toSet()); Map&lt;String, List&lt;Model&gt;&gt; result = new HashMap&lt;&gt;(); keys.stream().forEach(key -&gt; { List&lt;Model&gt; modelList = new ArrayList&lt;&gt;(); models.stream().forEach(model -&gt; { if (model.getKey().equals(key)) { modelList.add(model); } }); result.put(key, modelList); });</pre></div></object></string,> - Get Map<String, List<Object>> from List<Object> where the key is one of the fields of the objects 如何使用Java 8从对象列表中获取最小值和最大值 - How to get minimum and maximum value from List of Objects using Java 8 从另一个对象列表中的列表中获取 object - get object from list that is in another list of objects 是否存在一种将对象列表反序列化为来自该 object 的字段列表的快速方法? - Exists a quick way to deserialize a list of objects into a list of fields from that object? 根据两个字段从自定义对象列表中删除重复项 - Remove duplicates from a list of custom objects based on two fields 如何从列表中存储的对象中获取特定字段值的列表? - How to get a list of specific fields values from objects stored in a list?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM