Home > Blockchain >  How to sort an ArrayList on more than one field
How to sort an ArrayList on more than one field

Time:09-30

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;
        }
    }
});
  • Related