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
添加回答
舉報