用于简单自定义逻辑的java比较器

时间:2010-09-15 19:03:25

标签: java sorting comparator

我如何在下面的例子中找到第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&lt; b和c < d。


下面是不工作的例子,但我的思维方式,我怎么能指望比较器找到预期的对象。

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

2 个答案:

答案 0 :(得分:3)

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

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

如果其中任何一个不清楚,您将需要查找有关编写方法,编写类或使用接口的基本Java教科书。

答案 1 :(得分:0)

您似乎对使用比较器的地方感到困惑。 DJClayworth完全描述如何创建一个。例如,您可以使用一种排序机制:

Collections.sort(myList, myComparator);

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