Javaのリストをソートして重複を除く方法を教えてください
Collections.sort()メソッドでは、リスト内の要素がComparableインターフェイスを実装している場合、compareTo()メソッドの実装にしたがってソートされます。
ネイティブな日本語で言い換えました。ひとつだけ選びました。
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(2);
Collections.sort(list);
System.out.println(list); // 输出:[1, 2, 3]
`Comparable`インターフェースがリスト内の要素に実装されていない場合は、`Collections.sort()`メソッドのオーバーロードされたバージョンを使用できます。このオーバーロードされたバージョンは`Comparator`パラメータを受け取り、ソートのロジックの指定に使用します。
サンプルコード:
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println(list); // 输出:[apple, banana, orange]
リストから重複を削除するには、セットデータ構造を使用できます。セットは重複した要素を含まないコレクションなので、リストの要素をセットに追加してから、セットをリストに変換することができます。
サンプルコード:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(2);
list.add(1);
Set<Integer> set = new HashSet<>(list);
list = new ArrayList<>(set);
System.out.println(list); // 输出:[1, 2, 3]
また、Java8 以降であれば、stream()メソッドでソートや重複排除といった操作も可能です。
サンプルコード:
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(2);
list.add(2);
list.add(1);
list = list.stream()
.distinct()
.sorted()
.collect(Collectors.toList());
System.out.println(list); // 输出:[1, 2, 3]