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);
}
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
添加回答
举报