標準入力で
[15 20 35]
[30 45 72]
[15 20 31]
[27 33 59]
[27 35 77]
と与えられて、
[30 45 72]
[27 35 77]
[27 33 59]
[15 20 35]
[15 20 31]
と返す様に
1列目の降順ソートをし、1列目内で数値が同等のものを2列目の大小で決定、それでも決まらなかった場合3列目の大小で表示順を決めるプログラムを作りたいです
どういう方法があるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
「1列目の降順ソート」のコードは書けるのでしょうか?

回答2件
0
ベストアンサー
リストにしてComparator#thenComparing(...)などを使用するのが簡単そうです。
java
1import java.util.Arrays; 2import java.util.List; 3import java.util.Comparator; 4public class SortTest { 5 public static void main(String[] args) { 6 List<List<Integer>> list = Arrays.asList( 7 Arrays.asList(15, 20, 35), 8 Arrays.asList(30, 45, 72), 9 Arrays.asList(15, 20, 31), 10 Arrays.asList(27, 33, 59), 11 Arrays.asList(27, 35, 77)); 12 list.sort(Comparator.<List<Integer>>comparingInt(l -> l.get(0)) 13 .thenComparingInt(l -> l.get(1)) 14 .thenComparingInt(l -> l.get(2)) 15 .reversed()); 16 System.out.println(list); 17 // [[30, 45, 72], [27, 35, 77], [27, 33, 59], [15, 20, 35], [15, 20, 31]] 18 } 19} 20// Java 1.8 以前 21// list.sort(new ListIntegerComparator()); 22// Collections.reverse(list); 23class IntegerListComparator implements Comparator<List<Integer>> { 24 @Override public int compare(List<Integer> a, List<Integer> b) { 25 Integer i = a.get(1) - b.get(1); 26 if (i == 0) { 27 i = a.get(2) - b.get(2); 28 } 29 if (i == 0) { 30 i = a.get(3) - b.get(3); 31 } 32 return i; 33 } 34}
投稿2017/12/28 05:55
編集2017/12/28 11:30総合スコア158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
これは凄いですね
ありがとうございます!
出来たらでよろしいのですが、ラムダ式がない場合はどういうロジックで並び替えればよいのでしょうか?
ラムダ式がない場合=Java 1.8以前と解釈してコードを追記しました。
本当にありがとうございます!!

0
java
1Comparator<int[]> comparator = new Comparator<>(){ 2 @Override 3 public int compare(int[] a, int[] b) { 4 for (int i = 0; i < 3; i++) { 5 if (a[i] != b[i]) return b[i] - a[i]; 6 } 7 return 0; 8 } 9} 10Arrays.sort(array, comparator);
投稿2017/12/28 12:01
総合スコア20675
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。