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

回答編集履歴

4

追記

2019/03/19 11:12

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -85,6 +85,13 @@
85
85
  [Bob, Steve, Tom]
86
86
  ```
87
87
 
88
+ Comparator.naturalOrder はじめいくつかコンパレータが用意されていることを考えると、
89
+ そのオブジェクトのcompareToメソッドを呼び出すだけのコンパレータを作る意義はあまり無いです。
90
+
91
+ 文字数順だとか、ちょっと捻ったソートを試した方が学びは深いでしょう。
92
+
93
+ まぁ、ラムダ式を利用できる状況なら匿名クラスにはあまり出番がありませんが...
94
+
88
95
  コードの書き方について
89
96
  ---
90
97
  teratailには、コードを見やすく表示する機能があります。

3

追記

2019/03/19 11:12

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -58,6 +58,14 @@
58
58
  System.out.println(lst);
59
59
  }
60
60
 
61
+ // ラムダ式を利用
62
+ {
63
+ var lst = new ArrayList<>(names);
64
+
65
+ lst.sort((s1, s2) -> s1.compareTo(s2));
66
+ System.out.println(lst);
67
+ }
68
+
61
69
  // 自然順ならこれでも良し
62
70
  {
63
71
  var lst = new ArrayList<>(names);
@@ -69,11 +77,12 @@
69
77
  }
70
78
  ```
71
79
 
72
- **実行結果** [Wandbox](https://wandbox.org/permlink/safYqxIEYtcEWBg4)
80
+ **実行結果** [Wandbox](https://wandbox.org/permlink/pPE16fwjTp5SVciH)
73
81
  ```
74
82
  [Bob, Steve, Tom]
75
83
  [Bob, Steve, Tom]
76
84
  [Bob, Steve, Tom]
85
+ [Bob, Steve, Tom]
77
86
  ```
78
87
 
79
88
  コードの書き方について

2

追記

2019/03/19 10:55

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -18,6 +18,64 @@
18
18
  ソート時に呼び出されます。
19
19
  putSortOrderはおそらくコンパレータのセッターでしょう。
20
20
 
21
+ サンプル
22
+ ---
23
+ ```Java
24
+ import java.util.ArrayList;
25
+ import java.util.Comparator;
26
+ import java.util.List;
27
+
28
+
29
+ class AnonymousComparator implements Comparator<String> {
30
+ @Override
31
+ public int compare(String s1, String s2) {
32
+ return s1.compareTo(s2);
33
+ }
34
+ }
35
+
36
+ class Main {
37
+ public static void main(String[] args) {
38
+ var names = List.of("Tom", "Bob", "Steve");
39
+
40
+ // 匿名クラスを利用
41
+ {
42
+ var lst = new ArrayList<>(names);
43
+
44
+ lst.sort(new Comparator<String>() {
45
+ @Override
46
+ public int compare(String s1, String s2) {
47
+ return s1.compareTo(s2);
48
+ }
49
+ });
50
+ System.out.println(lst);
51
+ }
52
+
53
+ // 外部クラスを利用
54
+ {
55
+ var lst = new ArrayList<>(names);
56
+
57
+ lst.sort(new AnonymousComparator());
58
+ System.out.println(lst);
59
+ }
60
+
61
+ // 自然順ならこれでも良し
62
+ {
63
+ var lst = new ArrayList<>(names);
64
+
65
+ lst.sort(Comparator.naturalOrder());
66
+ System.out.println(lst);
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ **実行結果** [Wandbox](https://wandbox.org/permlink/safYqxIEYtcEWBg4)
73
+ ```
74
+ [Bob, Steve, Tom]
75
+ [Bob, Steve, Tom]
76
+ [Bob, Steve, Tom]
77
+ ```
78
+
21
79
  コードの書き方について
22
80
  ---
23
81
  teratailには、コードを見やすく表示する機能があります。

1

修正

2019/03/19 10:53

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  匿名クラスのインスタンスを作っています。次のように書いているのと意味は同じです。
4
4
  ```Java
5
- class AnonymousComparator extends Comparator<String> {
5
+ class AnonymousComparator implements Comparator<String> {
6
6
  public int compare(String o1, String o2) {
7
7
  return o1.compareTo(o2);
8
8
  }