投稿された元の質問は有効だと思います。「Collections.sort(..)」メソッドには、渡されたコレクションを並べ替えるという意図的な副作用があるため、元のコレクションを維持したい場合は、次のことを行う必要があります。
List<Bean> beans = service.findBeans();
List<Bean> sortedBeans = new ArrayList<Bean>(beans);
Collections.sort(sortedBeans, new BeanComparator());
return sortedBeans;
上記の場合、サービス メソッドによって返された 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
}
}
私の意見では、グアバの答えが最善です。Ordering