[英]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.