teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

compareの実装変更

2020/04/23 11:58

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -19,9 +19,9 @@
19
19
  list.sort(new Comparator<Test1.Score>() {
20
20
  @Override
21
21
  public int compare(Score o1, Score o2) {
22
- int s1 = o1.getTotalScore();
22
+ // 比較対象を逆にする
23
- int s2 = o2.getTotalScore();
23
+ Integer s2 = o2.getTotalScore();
24
- return s1 == s2 ? 0 : s1 > s2 ? -1 : 1;
24
+ return s2.compareTo(o1.getTotalScore());
25
25
  }
26
26
  });
27
27
 

1

applyAsIntの実装変更

2020/04/23 11:58

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  効率的というのが実装の楽さでいうなら
15
15
  Listのsortメソッドを、そのまま使う。
16
- Comparetorは昇順なので、判定を逆にする
16
+ Comparetorは昇順なので、判定を逆に実装するのが楽かな
17
17
 
18
18
  ```java
19
19
  list.sort(new Comparator<Test1.Score>() {
@@ -26,9 +26,7 @@
26
26
  });
27
27
 
28
28
  ```
29
- comapreの実装が通常と異なるのがイヤであればCollectionsreverseを使うことが前提
29
+ comapreの実装が通常と異なるのがイヤであれば以下実装も可能です。
30
- 以下の実装でも可能です。
31
- ※効率的が処理効率であるなら、revserをかます分こちらの方が重いです。
32
30
 
33
31
  ```java
34
32
  list.sort(
@@ -36,11 +34,9 @@
36
34
  new ToIntFunction<Score>() {
37
35
  @Override
38
36
  public int applyAsInt(Score s) {
39
- return s.getBiology() + s.getEnglish() + s.getPhysics();
37
+ return -1 * (s.getBiology() + s.getEnglish() + s.getPhysics());
40
38
  }
41
39
  }));
42
- // ここで逆順(降順)にする
43
- Collections.reverse(list);
44
40
  ```
45
41
 
46
42
  効率というか後々のことを考えれば合計点を返すメソッドを用意した方が楽でしょう。