KeisukeYamazaki
1/1/2020 - 3:36 PM

Java 並べ替えの方法

Java 並べ替えの方法

//##配列(固定長)のソート
//#昇順
Arrays.sort(配列名);
//#降順
Arrays.sort(配列名,  Collections.reverseOrder());

//##Listのソート
//#昇順
Collections.sort(リスト名);
//#降順
Collections.reverse(リスト名);
Collections.sort(リスト名, Collections.reverseOrder());

//##Stream.sorted()でStreamの結果をソートする
int[] values = [3,7,1,9,4];
//#昇順
Arrays.stream(values).sorted().forEach(System.out::println);
//#降順
Arrays.stream(values).sorted(Collections.reverseOrder()).forEach(System.out::println);
//##複数の条件で大小比較をしたい場合
class User implements Comparable<User> {
  int no; // 番号
  String name; // 氏名
 
  User(int no, String name) {
  this.no = no;
  this.name = name;
  }
 
  public int compareTo(User u) {
  // 先に名前で大小比較をして…
  int ret = this.name.compareTo(u.name);
 
  // 名前で大小の違いがあるならそこで終了
  if (ret != 0) {
  return ret;
  }
 
  // 名前が同じなら番号で比較(降順なので符号を逆にするため -1 を掛ける)
  return Integer.compare(this.no, u.no) * -1;
}
 
  public static void main(String[] args) {
  User u1 = new User(1, "山田太郎");
  User u2 = new User(100, "山田太郎"); // 同姓同名!
 
  System.out.println(u1.compareTo(u2)); // → 1!! 名前が同じなので番号で判断、1より100の方が大きいが、降順なので「1の方が100より大きい」
  }
}
// Comparatorを使えば、ソートのロジック部分を自由に切り替えられる
Comparator<User> c1 = new Comparator()<> {
  public int compare(User o1, User o2) {
  return Integer.compare(o1.no, o2.no); // 大小比較のロジック部分は自由に記述する
  }
}
 
// Comparatorを単純に逆順にするだけなら、Collections.reverseOrder(Comparator)を使うと楽ちん!!
Comparator<User> c2 = Collections.reverseOrder(c1);
 
List<User> users = ...;
Collections.sort(users, c1); // 番号昇順でのソート
Collections.sort(users, c2); // 番号降順でのソート