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

回答編集履歴

1

追記

2015/09/20 04:11

投稿

argius
argius

スコア9396

answer CHANGED
@@ -2,12 +2,13 @@
2
2
 
3
3
  不要なお世話かも知れませんが、他の箇所も簡略化できるところを変えてます。
4
4
 
5
+ なお、これはJava5以降で使えるサンプルです。
5
6
  ```lang-java
6
7
  // import java.util.*;
7
8
 
8
9
  String line = "aaa bbb ddd bbb aaa aaa ccc ddd bbb";
9
10
  String[] tokens = line.split(" ");
10
- LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
11
+ LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
11
12
  for (String token : tokens) {
12
13
  if (map.containsKey(token)) {
13
14
  map.put(token, map.get(token) + 1);
@@ -18,4 +19,18 @@
18
19
  for (Entry<String, Integer> entry : map.entrySet()) {
19
20
  System.out.printf("%s %d%n", entry.getKey(), entry.getValue());
20
21
  }
21
- ```
22
+ ```
23
+
24
+
25
+ Java8でStreamとラムダ式を使うと、さらに簡潔に書けます。
26
+
27
+ ```lang-java
28
+ // import java.util.*;
29
+ // import java.util.stream.*;
30
+
31
+ String line = "aaa bbb ddd bbb aaa aaa ccc ddd bbb";
32
+ String[] tokens = line.split(" ");
33
+ Map<String, Integer> map = Stream.of(tokens)
34
+ .collect(Collectors.toMap(k -> k, v -> 1, (v1, v2) -> v1 + v2, LinkedHashMap::new));
35
+ map.entrySet().forEach(x -> System.out.printf("%s %d%n", x.getKey(), x.getValue()));
36
+ ```