回答編集履歴
1
最新の回答を追加
answer
CHANGED
@@ -24,4 +24,35 @@
|
|
24
24
|
.filter(x -> !x.isEmpty())
|
25
25
|
//.peek(System.out::println)
|
26
26
|
.toArray(size -> new String[size]);
|
27
|
+
```
|
28
|
+
|
29
|
+
### Collectors.partitioningBy (2019-02-27)
|
30
|
+
Collectorsを使う解を示します。splitを使います。入力文字列と区切り文字のパターンを次のように用意します。
|
31
|
+
|
32
|
+
```Java
|
33
|
+
String source = "aaa.111,bbb.222,ccc.333";
|
34
|
+
String pattern = "\.|,"; // 区切り文字列
|
35
|
+
```
|
36
|
+
|
37
|
+
Pattern.splitAsStream、Collectors.partitioningByを使います。
|
38
|
+
```Java
|
39
|
+
import java.util.List;
|
40
|
+
import java.util.Map;
|
41
|
+
import java.util.regex.Pattern;
|
42
|
+
import java.util.stream.Collectors;
|
43
|
+
Map<Boolean, List<String>> m =
|
44
|
+
Pattern.compile(pattern)
|
45
|
+
.splitAsStream(source)
|
46
|
+
//.peek(System.out::println)
|
47
|
+
.collect(
|
48
|
+
Collectors.partitioningBy(x -> x.charAt(0) >= 'a')
|
49
|
+
);
|
50
|
+
System.out.println(m);
|
51
|
+
```
|
52
|
+
結果は、List<String>ですが、String[]への変換は容易なので省略。
|
53
|
+
|
54
|
+
Scalaは簡単にできるので、Java以外の言語ならもっと簡単になるのではないでしょうか。
|
55
|
+
|
56
|
+
```Scala
|
57
|
+
val (a,b) = "[a-z]{3}|[0-9]{3}".r.findAllIn("aaa.111,bbb.222,ccc.333").partition(x => x.charAt(0)>='a')
|
27
58
|
```
|