使用自定义排序功能实现Treeset

时间:2015-08-21 14:16:42

标签: java arrays collections set comparator

我正在尝试使用自定义排序功能实现treeset。我已经通过了包含排序逻辑的比较器对象。

import java.util.Comparator;
import java.util.TreeSet;

public class MySetWithCompr {

    public static void main(String a[]){

        TreeSet<String> ts = new TreeSet<String>(new MyComp());
        ts.add("Test1");
        ts.add("Test2");
        ts.add("Test3");
        ts.add("Test4");
        System.out.println(ts);
    }
}

class MyComp implements Comparator<String>{

    @Override
    public int compare(String str1, String str2) {
        return str1.compareTo(str2);
    }

}

以上程序给出了以下输出

[Test1, Test2, Test3, Test4]

请建议如何实现比较器逻辑,以便结果反向

Expected Result : [Test4, Test3, Test2, Test1]

3 个答案:

答案 0 :(得分:4)

如果你使用的是Java 8,你可以简单地写一下:

Set<String> ts = new TreeSet<>(new MyComp().reversed());

Java 8之前有相同的功能(自Java 5起):

Set<String> ts = new TreeSet<String>(Collections.reverseOrder(new MyComp()));

答案 1 :(得分:2)

尝试:

bindingexpression path error 'Name'property not found on 'object'

答案 2 :(得分:0)

如果你想要desc订购,有两种方法:

第一:

class MyComp implements Comparator<String> {
    @Override
    public int compare(String str1, String str2) {
        return str2.compareTo(str1);
    }
}

第二:

class MyComp implements Comparator<String> {
    @Override
    public int compare(String str1, String str2) {
        return -1 * str1.compareTo(str2);
    } 
}