回答編集履歴

2

Stream処理

2017/09/24 18:31

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  .limit(10)
34
34
 
35
- .forEachOrdered(e -> System.out.println(e.getKey());
35
+ .forEachOrdered(e -> System.out.println(e.getKey()));
36
36
 
37
37
  }
38
38
 
@@ -49,3 +49,41 @@
49
49
 
50
50
 
51
51
  というのを繰り返していくことになると思います。
52
+
53
+
54
+
55
+ ---
56
+
57
+
58
+
59
+ 追記 最初から最後までStreamで処理する
60
+
61
+
62
+
63
+ ```java
64
+
65
+ public static void main(String[] args) {
66
+
67
+ // 諸々の宣言
68
+
69
+
70
+
71
+ Map<Character, Long> map = s.codePoints().mapToObj(i -> (char)i)
72
+
73
+ .collect(Collectors.groupingBy(c -> c, Collectors.counting()));
74
+
75
+ map.entrySet().stream()
76
+
77
+ .sorted(Comparator.<Map.Entry<Character, Long>, Long>comparing(e -> e.getValue(),
78
+
79
+ Comparator.reverseOrder())
80
+
81
+ .thenComparing(e -> e.getKey()))
82
+
83
+ .limit(10)
84
+
85
+ .forEachOrdered(e -> System.out.println(e.getKey()));
86
+
87
+ }
88
+
89
+ ```

1

追記、不足している括弧の補充

2017/09/24 18:30

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,6 +1,8 @@
1
1
  何を使ってもいいなら、Mapを使うと集計は簡単です。
2
2
 
3
3
  ソートが若干面倒ですが、LouiS0616さんが言うような「ソート時情報が消える」ということはなくなります。
4
+
5
+ (以下はJava8の書き方で、動作未検証)
4
6
 
5
7
  ```java
6
8
 
@@ -24,7 +26,7 @@
24
26
 
25
27
  // 登場回数の多い順に並べ替える
26
28
 
27
- .sorted(Comparator.comparing(e -> e.getValue(), Comparator.reverseOrder())
29
+ .sorted(Comparator.comparing(e -> e.getValue(), Comparator.reverseOrder()))
28
30
 
29
31
  // 先頭から、つまり登場回数の多いほうから10個に制限
30
32