Я бы посоветовал вам написать свой собственный метод сравнения внутри вашего объекта при реализации "Comparable"
что-то вроде
открытый класс CompareObject реализует Comparable {
String id;
String myNumber;
public CompareObject(String id, String myNumber) {
this.id = id;
this.myNumber = myNumber;
}
public int compareTo(CompareObject c) {
String myNumberOnlyNumbers = "";
String otherNumberOnlyNumbers = "";
for(int i = 0; i < myNumber.length(); i++) {
try {
myNumberOnlyNumbers += Integer.parseInt(myNumber.charAt(i)+"") + "";
} catch (NumberFormatException e) {
}
}
for(int i = 0; i < c.myNumber.length(); i++) {
try {
otherNumberOnlyNumbers += Integer.parseInt(c.myNumber.charAt(i)+"") + "";
} catch (NumberFormatException e) {
}
}
return Integer.compare(Integer.parseInt(myNumberOnlyNumbers), Integer.parseInt(otherNumberOnlyNumbers));
}
}
в вашем случае «CompareObject» будет «MyObject»
после этого вы можете сделать
List<CompareObject> list = new ArrayList<>();
list.add(new CompareObject("1", "1"));
list.add(new CompareObject("2", "2"));
list.add(new CompareObject("3", "3"));
list.add(new CompareObject("4", "12"));
list.add(new CompareObject("5", "1d3"));
Collections.sort(list, Collections.reverseOrder()); //Collections.reverseOrder() meaning in descending order here
и если я сделаю
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).id + " - " + list.get(i).myNumber);
}
чтобы напечатать список, который я получаю
5 - 1d3
4 - 12
3 - 3
2 - 2
1 - 1