回答編集履歴
2
Stream処理
answer
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
.sorted(Comparator.comparing(e -> e.getValue(), Comparator.reverseOrder()))
|
16
16
|
// 先頭から、つまり登場回数の多いほうから10個に制限
|
17
17
|
.limit(10)
|
18
|
-
.forEachOrdered(e -> System.out.println(e.getKey());
|
18
|
+
.forEachOrdered(e -> System.out.println(e.getKey()));
|
19
19
|
}
|
20
20
|
```
|
21
21
|
これを使わないなら、
|
@@ -23,4 +23,23 @@
|
|
23
23
|
0. ソート用にその配列を複製し、ソートする
|
24
24
|
0. ソートした配列の上位から数値を取り、元の配列からその数値を取るインデックス番号を探す
|
25
25
|
|
26
|
-
というのを繰り返していくことになると思います。
|
26
|
+
というのを繰り返していくことになると思います。
|
27
|
+
|
28
|
+
---
|
29
|
+
|
30
|
+
追記 最初から最後までStreamで処理する
|
31
|
+
|
32
|
+
```java
|
33
|
+
public static void main(String[] args) {
|
34
|
+
// 諸々の宣言
|
35
|
+
|
36
|
+
Map<Character, Long> map = s.codePoints().mapToObj(i -> (char)i)
|
37
|
+
.collect(Collectors.groupingBy(c -> c, Collectors.counting()));
|
38
|
+
map.entrySet().stream()
|
39
|
+
.sorted(Comparator.<Map.Entry<Character, Long>, Long>comparing(e -> e.getValue(),
|
40
|
+
Comparator.reverseOrder())
|
41
|
+
.thenComparing(e -> e.getKey()))
|
42
|
+
.limit(10)
|
43
|
+
.forEachOrdered(e -> System.out.println(e.getKey()));
|
44
|
+
}
|
45
|
+
```
|
1
追記、不足している括弧の補充
answer
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
何を使ってもいいなら、Mapを使うと集計は簡単です。
|
2
2
|
ソートが若干面倒ですが、LouiS0616さんが言うような「ソート時情報が消える」ということはなくなります。
|
3
|
+
(以下はJava8の書き方で、動作未検証)
|
3
4
|
```java
|
4
5
|
public static void main(String[] args) {
|
5
6
|
|
@@ -11,7 +12,7 @@
|
|
11
12
|
}
|
12
13
|
countMap.entrySet().stream()
|
13
14
|
// 登場回数の多い順に並べ替える
|
14
|
-
.sorted(Comparator.comparing(e -> e.getValue(), Comparator.reverseOrder())
|
15
|
+
.sorted(Comparator.comparing(e -> e.getValue(), Comparator.reverseOrder()))
|
15
16
|
// 先頭から、つまり登場回数の多いほうから10個に制限
|
16
17
|
.limit(10)
|
17
18
|
.forEachOrdered(e -> System.out.println(e.getKey());
|