猿问

使用自定义标准对 java 8 上的对象列表进行排序

我有一个清单MyObject


List<MyObject> myObjects;

模型类在哪里MyObject,如下所示


public class MyObject{


private String fName;

private String lname;

private String code;


//getter setter


}

比方说,代码有四种可能的值ABC,DEF,XYZ and PQR

现在我想根据以下标准对列表进行排序。所有具有代码值的对象都XYZ应该放在第一位,然后是PQR,ABCDEF

  1. XYZ

  2. 质量评估报告

  3. ABC

  4. DEF

如果可能的话,我想使用 java 8 来实现这一点。我怎样才能对我的ArrayList进行排序?


忽然笑
浏览 127回答 2
2回答

弑天下

如果您的代码变量只能采用四个可能的值,您可以将它们保存在映射中,并在对列表进行排序时比较这些值:public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; List<MyObject> myObjects = new ArrayList<>();&nbsp; &nbsp; myObjects.add(new MyObject("fName1", "lname1", "ABC"));&nbsp; &nbsp; myObjects.add(new MyObject("fName2", "lname2", "PQR"));&nbsp; &nbsp; myObjects.add(new MyObject("fName3", "lname3", "XYZ"));&nbsp; &nbsp; myObjects.add(new MyObject("fName4", "lname4", "DEF"));&nbsp; &nbsp; Map<String,Integer> map = new HashMap<>();&nbsp; &nbsp; map.put("XYZ", 1);&nbsp; &nbsp; map.put("PQR", 2);&nbsp; &nbsp; map.put("ABC", 3);&nbsp; &nbsp; map.put("DEF", 4);&nbsp; &nbsp; Comparator<MyObject> sortByCode = (obj1,obj2)->Integer.compare(map.get(obj1.code), map.get(obj2.code));&nbsp; &nbsp; System.out.println("Before sorting");&nbsp; &nbsp; System.out.println(myObjects);&nbsp; &nbsp; System.out.println("After sorting");&nbsp; &nbsp; myObjects.sort(sortByCode);&nbsp; &nbsp; System.out.println(myObjects);}

繁华开满天机

您需要创建自己的实例来根据您的逻辑Comparator比较实例:MyObjectComparator<MyObject> cmp = (o1, o2) ->{&nbsp; &nbsp; //Implement comparison logic here&nbsp; &nbsp; //Compare o1 and o2 and return -1,0, or 1 depending on your logic};然后给出一个像这样的列表:List<MyObject> listToSort = ...您可以使用旧函数对其进行就地排序Collections.sort():Collections.sort(listToSort, cmp);或者,如果您愿意,可以使用 Java 8 流:listToSort.stream().sorted(cmp).collect(Collectors.toList()); //Using streams
随时随地看视频慕课网APP

相关分类

Java
我要回答