如何组合两个Collections.sort函数

ttt*_*ttt 2 java sorting collections

我有一个程序,我有一个名单列表,有多少人有这个名字.我想按字母顺序排列名称,同时将计数从最大到最小.如果名称具有相同的计数,则将名称按字母顺序排列.我想出了如何把名字放在abc的顺序,并弄清楚如何将计数放在最小到最小但我无法弄清楚如何将两者结合起来得到最大和最小的名单,如果他们有相同的字母数订购.

 Collections.sort(oneName, new OneNameCompare());
    for(OneName a: oneName)
    {
     System.out.println(a.toString());

    }
 Collections.sort(oneName, new OneNameCountCompare());
     for(OneName a: oneName)
    {

     System.out.println(a.toString());
     }
Run Code Online (Sandbox Code Playgroud)

rge*_*man 5

你可以制作另一个Comparator结合了另外两个Comparators 的效果.如果一个比较器比较相等,则可以调用第二个比较器并使用其值.

public class CountNameComparator implements Comparator<Name>
{
    private OneNameCompare c1 = new OneNameCompare();
    private OneNameCountCompare c2 = new OneNameCountCompare();
    @Override
    public int compare(Name n1, Name n2)
    {
        int comp = c1.compare(n1, n2);
        if (comp != 0) return comp;
        return c2.compare(n1, n2);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话Collections.sort一次.

Collections.sort(oneName, new CountNameComparator());
Run Code Online (Sandbox Code Playgroud)

这可以推广到任意数量的比较器.