我覺得貼了原來的問題是有效的。因爲「Collections.sort(..)」方法排序傳入的集合,如果你想保持你原來的集合,你需要做以下的預期副作用:
List<Bean> beans = service.findBeans();
List<Bean> sortedBeans = new ArrayList<Bean>(beans);
Collections.sort(sortedBeans, new BeanComparator());
return sortedBeans;
在上面的例子中,我們對服務方法返回的Collection進行排序可能不是那麼重要。但是,如果我們正在排序的Collection是一個方法參數,並且調用者不希望Collection傳入排序?
我通常更喜歡有沒有後果的方法。
由於 「Collections.sort(..)」 影響的名單,我已經寫了下面的代碼:
public void doSomethingWithBeansInOrder(List<Bean> beans) {
Collection<Bean> sortedBeans = new ArrayList<Bean>(beans);
Collections.sort(sortedBeans, ...comparator...;
for (Bean bean : sortedBeans) {
.. do something
}
}
我覺得 「sortedBeans」 的定義難看。
如果「(Collections.sort(..)」(或類似的東西),返回一個新的集合,並沒有影響傳入的集合,我可以這樣寫:
public void doSomethingWithBeansInOrder(List<Bean> beans) {
for (Bean bean : Collections.sort(beans, ...comparator...) {
.. do something
}
}
的答案Guava的Ordering
是最好的,在我看來。
原始有什麼問題? –
圖書館的目的是什麼,如果它只是做'Collections.sort'已經提供的完全相同的東西? – mellamokb
沒有錯。有用。我正在尋找一種快捷方式,只用一行就能完成我想要的功能。 – falsarella