为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

忽然笑 2023-10-12 17:02:43
我有一个清单MyObjectList<MyObject> myObjects;模型类在哪里MyObject,如下所示public class MyObject{private String fName;private String lname;private String code;//getter setter}比方说,代码有四种可能的值ABC,DEF,XYZ and PQR。现在我想根据以下标准对列表进行排序。所有具有代码值的对象都XYZ应该放在第一位,然后是PQR,ABC和DEF。XYZ质量评估报告ABCDEF如果可能的话,我想使用 java 8 来实现这一点。我怎样才能对我的ArrayList进行排序?
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

如果您的代码变量只能采用四个可能的值,您可以将它们保存在映射中,并在对列表进行排序时比较这些值:


public static void main(String[] args) {             

    List<MyObject> myObjects = new ArrayList<>();

    myObjects.add(new MyObject("fName1", "lname1", "ABC"));

    myObjects.add(new MyObject("fName2", "lname2", "PQR"));

    myObjects.add(new MyObject("fName3", "lname3", "XYZ"));

    myObjects.add(new MyObject("fName4", "lname4", "DEF"));


    Map<String,Integer> map = new HashMap<>();

    map.put("XYZ", 1);

    map.put("PQR", 2);

    map.put("ABC", 3);

    map.put("DEF", 4);


    Comparator<MyObject> sortByCode = (obj1,obj2)->Integer.compare(map.get(obj1.code), map.get(obj2.code));

    System.out.println("Before sorting");

    System.out.println(myObjects);


    System.out.println("After sorting");

    myObjects.sort(sortByCode);

    System.out.println(myObjects);

}


查看完整回答
反对 回复 2023-10-12
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您需要创建自己的实例来根据您的逻辑Comparator比较实例:MyObject


Comparator<MyObject> cmp = (o1, o2) ->{

    //Implement comparison logic here

    //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


查看完整回答
反对 回复 2023-10-12
  • 2 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信