JavaにはがありSet
、それをソート済みにしたいList
。java.util.Collections
パッケージにこれを行うメソッドはありますか?
JavaにはがありSet
、それをソート済みにしたいList
。java.util.Collections
パッケージにこれを行うメソッドはありますか?
回答:
OPによって提供される答えは最良ではありません。それは新しい作成しますように、それは、非効率的であるList
と、不要な新しい配列を。また、ジェネリック配列に関するタイプセーフティの問題のため、「チェックされていない」警告が発生します。
代わりに、次のようなものを使用します。
public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
List<T> list = new ArrayList<T>(c);
java.util.Collections.sort(list);
return list;
}
次に使用例を示します。
Map<Integer, String> map = new HashMap<Integer, String>();
/* Add entries to the map. */
...
/* Now get a sorted list of the *values* in the map. */
Collection<String> unsorted = map.values();
List<String> sorted = Util.asSortedList(unsorted);
Util
クラスは、asSortedList()
私が作成したメソッドを含むクラスです。つまり、Util
クラスを自分で作成し、そのコードをその中に入れます。
ソートされたセット:
return new TreeSet(setIWantSorted);
または:
return new ArrayList(new TreeSet(setIWantSorted));
Set
か?
new TreeSet
受け入れるため、言及する価値があります。この回答を読んでいるすべての人がを使用するわけではありませんが、それは元の質問が求めているものです。Collection
Set
Set
List myList = new ArrayList(collection);
Collections.sort(myList);
…しかしトリックをするべきです。必要に応じてGenericsでフレーバーを追加します。
Comparable
してオーバーライドすることができますcompareTo
。
ComparatorまたはComparableインターフェースのいずれかを使用してソートの実装を提供しても常に安全です(オブジェクトがプリミティブデータ型のStringクラスまたはWrapperクラスでない場合)。名前に基づいて従業員をソートするコンパレータ実装の例として
List<Employees> empList = new LinkedList<Employees>(EmpSet);
class EmployeeComparator implements Comparator<Employee> {
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
}
Collections.sort(empList , new EmployeeComparator ());
コンパレータは、同じオブジェクト(たとえば、emp名、emp salaryなど)に異なるソートアルゴリズムが必要な場合に役立ちます。シングルモードの並べ替えは、必要なオブジェクトにComparableインターフェイスを使用することで実装できます。
それを行う単一の方法はありません。これを使って:
@SuppressWarnings("unchecked")
public static <T extends Comparable> List<T> asSortedList(Collection<T> collection) {
T[] array = collection.toArray(
(T[])new Comparable[collection.size()]);
Arrays.sort(array);
return Arrays.asList(array);
}
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
ここで、originalset =ソートされていないセット、list =返されるリスト
@Jeremy Stein同じコードを実装したかった。同様に、セットをリストにソートしたかったので、セットを使用する代わりに、セット値をリストに変換し、そのリストを変数の1つに基づいてソートしました。このコードは私を助けました、
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());