【问题标题】:java comparator for simple custom logic用于简单自定义逻辑的 java 比较器
【发布时间】:2013-09-08 19:20:17
【问题描述】:

如何在下面的示例中找到第 4,1 和 6 行?
在这种情况下,将 Collection.sort() 与 Comparator 一起使用是否合理?

       a -  b - c - d

1.)    6    8   16  18   
2.)    38  40   55  57  
3.)    6    8   25  27  
4.)    1    5   11  15  
5.)    6    8    3   5  
6.)    9   12   19  22   
7.)    18  20    1   3  
8.)    23  25   15  17 

顶部的示例是一个列表,其对象符合以下条件:
- 每个对象包含 4 个整数(a,b,c,d),
- 列表中的每个对象都是唯一的,
- a


以下不是工作示例,而是我的思维方式,我可以期望比较器如何工作以找到预期的对象。

public class Row_Filter implements Comparable<Row_Filter>{
    int a,b,c,d;
    public Row_Filter(int a, int b, int c, int d) {
        this.a = a; this.b = b; this.c = c; this.d = d;
    }
   static class FilterAccordingAB implements Comparator<Row_Filter> {
        public int compare(Row_Filter o1, Row_Filter o2) {
            return o2.a - o1.b+1;
        }
    }
   static class FilterAccordingCD implements Comparator<Row_Filter> {
        public int compare(Row_Filter o1, Row_Filter o2) {
            return o2.c - o1.d+1;
        }
    }
   static class FilterAccordingABCD implements Comparator<Row_Filter> {
        public int compare(Row_Filter o1, Row_Filter o2) {
            FilterAccordingAB abF=null;    FilterAccordingCD cdF=null;
            if((abF.compare(o1, o2)==0) && (cdF.compare(o1, o2)==0)){
                return 1;
            }
            return -1;
        }
    }
} 

【问题讨论】:

  • 这会是家庭作业吗?
  • 第 1,4 和 6 行有什么特别之处?
  • 您在处理哪些对象类型? ...这么多问题意味着你的问题很糟糕!
  • 特别,这是我必须在列表中合并为单行/对象的对象 -->(1 - 12 - 11 - 22)。
  • 比较器类不找东西,它们比较东西。

标签: java sorting comparator


【解决方案1】:

您需要做的是实现一个比较器接口。查找该接口的 JavaDocs。您将需要编写一个实现该接口的类。这涉及编写一种方法(您不需要重新实现 equals())。

该方法获得了两个对象。根据您的要求,查看您需要从该方法返回什么值以显示两个对象“相等”。然后根据您的要求编写代码以在它们“相等”时返回该值。

如果有任何不清楚的地方,您需要查阅有关编写方法、编写类或使用接口的基本 Java 教科书。

【讨论】:

    【解决方案2】:

    您似乎对在哪里使用比较器感到困惑。 DJClayworth 准确地描述了如何创建一个。例如,您可以在排序机制中使用一个:

    Collections.sort(myList, myComparator);
    

    您使用它是因为您可以定义比较算法来对集合进行排序。希望这有助于澄清一些。

    【讨论】:

    • 谢谢阿珀金斯。我并不十分困惑在哪里使用比较器(如果是 List)。但是,如何在 Comparator-Language 中描述比较器的匹配条件。
    • 如果考虑如何通过合并对象来减小列表大小,我真的很困惑。按照这种方式,我必须创建第二个列表,遍历匹配对象的第一个列表应对值并通过每个匹配 Collection.sort() 方法调用。对于更大的列表,这似乎不是一个高性能的解决方案。如果有人感兴趣,下面是整个问题的初始描述的链接。链接:stackoverflow.com/questions/3712669/…
    猜你喜欢
    • 2018-12-22
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多