Search code examples
javasortingobjectcollectionsalphabetical

sort arraylist of complex objects alphabetically


I know that Collections.sort(myArrayList) can sort an arraylist alphabetically when they are strings, but what about when they are something more complex such as a data object containing two or more variables including a String. Is there a way to sort them then?

If there isn't a way with Collections then I can imagine making a for loop or standard sorting algorithm to look at the strings variable of each object and move the object's index in the array.

But I was wondering mainly if I overlooked something about the Collections methods


Solution

  • Use the function taking as second parameter a Comparator.

    Il allows you to pass an instance of Comparator to sort according to your needs. Note that the javadoc of Comparator contains guidelines regarding the building of comparators.

    You may define the comparator as an anonymous class if it's only locally used. Here's an example where I sort objects regarding to one of their fields which is a String :

    Collections.sort(groupResults, new Comparator<ProductSearchResult>() {
        public int compare(ProductSearchResult result1, ProductSearchResult result2) {
            return result1.product.getRsId().compareTo(result2.product.getRsId());
        }
    });
    

    Alternatively, you might also make your class implement the Comparable interface but this makes sense only if you can define a natural (obvious) order.