回答編集履歴
2
Java8の書き方追加
answer
CHANGED
@@ -19,4 +19,14 @@
|
|
19
19
|
= IntStream.rangeClosed('a', 'z')
|
20
20
|
.map(c -> Map.entry((char)c, (int)(Math.random() * MAX + 1))
|
21
21
|
.collect(groupingBy(e -> e.getValue(), mapping(e -> e.getKey(), toList())));
|
22
|
+
```
|
23
|
+
Java8ならこうなるか
|
24
|
+
```java
|
25
|
+
// import static java.util.stream.Collectors.*;
|
26
|
+
final int MAX = 10;
|
27
|
+
Map<Integer, List<Character>> map
|
28
|
+
= IntStream.rangeClosed('a', 'z')
|
29
|
+
.collect(toMap(c -> (char)c, c -> (int)(Math.random() * MAX + 1))
|
30
|
+
.entrySet().stream()
|
31
|
+
.collect(groupingBy(e -> e.getValue(), mapping(e -> e.getKey(), toList())));
|
22
32
|
```
|
1
Streamでマッピング
answer
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
computeIfAbsentとかgetOrDefaultとかを活用
|
1
2
|
```java
|
2
3
|
final int MAX = 10;
|
3
4
|
Random r = new Random();
|
@@ -9,4 +10,13 @@
|
|
9
10
|
for (int i = 1; i <= MAX; i++) {
|
10
11
|
System.out.println(map.getOrDefault(Collections.emptyList()));
|
11
12
|
}
|
13
|
+
```
|
14
|
+
Java9以上ならStreamでこんな書き方もできるが、ここで使っているMap.entryじゃなくても2つの値をペアにしてオブジェクトを作れればなんでもいい
|
15
|
+
```java
|
16
|
+
// import static java.util.stream.Collectors.*;
|
17
|
+
final int MAX = 10;
|
18
|
+
Map<Integer, List<Character>> map
|
19
|
+
= IntStream.rangeClosed('a', 'z')
|
20
|
+
.map(c -> Map.entry((char)c, (int)(Math.random() * MAX + 1))
|
21
|
+
.collect(groupingBy(e -> e.getValue(), mapping(e -> e.getKey(), toList())));
|
12
22
|
```
|