【问题标题】:Implement Treeset with custom sorting functionality使用自定义排序功能实现 Treeset
【发布时间】:2015-08-21 14:16:41
【问题描述】:

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

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]

【问题讨论】:

    标签: java arrays collections set comparator


    【解决方案1】:

    如果您使用的是 Java 8,您可以简单地编写:

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

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

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

    【讨论】:

      【解决方案2】:

      试试看:

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

      【讨论】:

        【解决方案3】:

        如果你想 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);
            } 
        }
        

        【讨论】:

        • 不需要乘法。它可以是- str1.compareTo(str2)
        • 是的,这是真的,但这只是语法问题,取决于每个人的喜好
        猜你喜欢
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 2013-02-25
        • 2015-11-01
        • 2022-01-04
        • 2016-09-18
        • 2022-01-05
        • 1970-01-01
        相关资源
        最近更新 更多