Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
205 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 Reply

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));

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...