I have ArrayList<Item> itemList. The Class Item contains two fields: char firstLetter and char secondLetter.
If I wanted to sort itemList on firstLetter, the code would be
Collections.sort(itemList, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
char order1 = o1.getFirstLetter();
char order2 = o2.getFirstLetter();
return Character.compare(order1,order2);
}
});
However, within the same sorting operation I want itemList also to be sorted according to secondLetter. So items that have the same value for firstLetter are sorted among them according to their value for secondLetter. How should the above code be modified?
CodePudding user response:
You can try this.
Collections.sort(itemList, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
char order1 = o1.getFirstLetter();
char order2 = o2.getFirstLetter();
char order3 = o1.getSecondLetter();
char order4 = o2.getSecondLetter();
String first = String.valueOf(order1) String.valueOf(order3)
String second= String.valueOf(order2) String.valueOf(order4)
return first.compareTo(second);
}
});
An embedded solution should look like this:
Collections.sort(itemList, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
char order1 = o1.getFirstLetter();
char order2 = o2.getFirstLetter();
char order3 = o1.getSecondLetter();
char order4 = o2.getSecondLetter();
int compare = Character.compare(order1,order2);
if(compare == 0){
return Character.compare(order3,order4);
} else {
return compare;
}
}
});
