Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
202 views
in Technique[技术] by (71.8m points)

java - How to sort by a field of class with its own comparator?

I have a sample class, say Country:

class Country {
    public String name;
    public int population;
    public Flag flag;  
    ...                                                                        
}

I have this Flag class defined somewhere else

class Flag {
    String id;
    int pixel;
    ...
}

Now I create a separate comparator DefaultFlagRankingComparator() that can sort Flag by id. How can I sort a list of Country by Flag id, using this DefaultFlagRankingComparator()?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can invoke the compare method of the Comparator with the flag field of each country.

DefaultFlagRankingComparator flagComparator =
        new DefaultFlagRankingComparator();
Collections.sort(countries, (a, b) ->
        flagComparator.compare(a.getFlag(), b.getFlag()));

You could also use Comparator.comparing to create a Comparator using a key extracting function and a Comparator that compares those keys (as suggested by Louis Wasserman).

DefaultFlagRankingComparator flagComparator =
        new DefaultFlagRankingComparator();
Collections.sort(countries,
        Comparator.comparing(Country::getFlag, flagComparator));

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...