簡體   English   中英

簡單比較的Java比較器

[英]java comparator for simple custom logic

在下面的示例中,如何找到第4,1和6行?
在這種情況下,在Comparator中使用Collection.sort()是否合理?

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

您需要做的是實現一個Comparator 接口 查找該接口的JavaDocs。 您將需要編寫一個實現該接口的類。 這涉及編寫一個方法(您無需重新實現equals())。

該方法將傳遞兩個對象。 查看需要從該方法返回的值,以根據您的要求顯示兩個對象“相等”。 然后根據您的要求編寫代碼以在“相等”時返回該值。

如果尚不清楚,則需要查找有關編寫方法,編寫類或使用接口的基本Java教科書。

似乎在使用比較器的地方感到困惑。 DJClayworth准確描述了如何創建一個。 例如,您可以使用一種排序機制:

Collections.sort(myList, myComparator);

之所以使用它,是因為您可以定義比較算法以對集合進行排序。 希望這有助於澄清。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM