回答編集履歴

2

Java8の書き方追加

2018/10/04 01:39

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -41,3 +41,23 @@
41
41
  .collect(groupingBy(e -> e.getValue(), mapping(e -> e.getKey(), toList())));
42
42
 
43
43
  ```
44
+
45
+ Java8ならこうなるか
46
+
47
+ ```java
48
+
49
+ // import static java.util.stream.Collectors.*;
50
+
51
+ final int MAX = 10;
52
+
53
+ Map<Integer, List<Character>> map
54
+
55
+ = IntStream.rangeClosed('a', 'z')
56
+
57
+ .collect(toMap(c -> (char)c, c -> (int)(Math.random() * MAX + 1))
58
+
59
+ .entrySet().stream()
60
+
61
+ .collect(groupingBy(e -> e.getValue(), mapping(e -> e.getKey(), toList())));
62
+
63
+ ```

1

Streamでマッピング

2018/10/04 01:39

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,3 +1,5 @@
1
+ computeIfAbsentとかgetOrDefaultとかを活用
2
+
1
3
  ```java
2
4
 
3
5
  final int MAX = 10;
@@ -21,3 +23,21 @@
21
23
  }
22
24
 
23
25
  ```
26
+
27
+ Java9以上ならStreamでこんな書き方もできるが、ここで使っているMap.entryじゃなくても2つの値をペアにしてオブジェクトを作れればなんでもいい
28
+
29
+ ```java
30
+
31
+ // import static java.util.stream.Collectors.*;
32
+
33
+ final int MAX = 10;
34
+
35
+ Map<Integer, List<Character>> map
36
+
37
+ = IntStream.rangeClosed('a', 'z')
38
+
39
+ .map(c -> Map.entry((char)c, (int)(Math.random() * MAX + 1))
40
+
41
+ .collect(groupingBy(e -> e.getValue(), mapping(e -> e.getKey(), toList())));
42
+
43
+ ```