java比較器的復用

2021-06-27 11:04:45 字數 1355 閱讀 4134

部落格主頁:

設想這麼一種場景:a有n個字段,也有專門對a的比較函式。每一次比較函式,在n多個業務線復用。

那麼,問題來了, 突然有一天a多加了乙個欄位in,而且在原一特定場景中這個欄位比其它所有欄位的優先順序都應該高。在其它場景中又沒有影響。

該怎麼解決這個問題?

1. 重寫原有的所有的comparator類,重寫它們的compare方法。這種方法代價太大,因為n多地方需要 if...else

2. 隻正對特定場景新增乙個組合之前的comparator的方法。

如果有一種collections.sort(alist, lists.newarrarylist(c1, c2, c3))這樣的資料結構,那麼問題就迎刃而解了(其實自己寫乙個也很簡單)。

不過沒有找到,無意之中在apache.commons.collections 找到了乙個可以完全替代他的類。comparatorchain,內部也是用乙個鍊錶儲存所有排序器

c1、c2都可以當做是以往就使用的排序器

static class a 

@override

public string tostring() ';}}

public static void main(string args)

comparatorchain multisort = new comparatorchain();

multisort.addcomparator(new comparator()

@override

public boolean equals(object obj)

});multisort.addcomparator(new comparator()

@override

public boolean equals(object obj)

});system.out.println("排序前:" + joiner.on(",").join(alist));

collections.sort(alist, multisort);

system.out.println("排序後:" + joiner.on(",").join(alist));

}

測試結果:

排序前:a,a,a,a,a,a,a,a,a,a

排序後:a,a,a,a,a,a,a,a,a,a

關於java比較器

最近由於需要用到集合去給集合中的元素排序,需要用到比較器,所以對比較器做下小的總結。問題的產生很簡單,就是需要根據乙個高維的變數對資料進行排序,例如 中的資料是乙個有六個維度的資料集,需要根據從第一維開始到第六維有序排序,自讓而然需要使用到比較器,首先看類的定義 class quads implem...

java物件比較器和轉殖

一.比較器comparable和comparator public class mystring person b arrays.sort a for int i 0 i system.out.print a i system.out.print r n arrays.sort b for int ...

java物件比較器和轉殖

一.比較器comparable和comparator public class mystring person b arrays.sort a for int i 0 i程式執行結果 我們發現string可以呼叫arrays.sort 函式,而我們自定義的person類報錯,看錯誤的關鍵字compa...