回答編集履歴

1

最新の回答を追加

2019/02/27 04:04

投稿

退会済みユーザー
test CHANGED
@@ -51,3 +51,65 @@
51
51
  .toArray(size -> new String[size]);
52
52
 
53
53
  ```
54
+
55
+
56
+
57
+ ### Collectors.partitioningBy (2019-02-27)
58
+
59
+ Collectorsを使う解を示します。splitを使います。入力文字列と区切り文字のパターンを次のように用意します。
60
+
61
+
62
+
63
+ ```Java
64
+
65
+ String source = "aaa.111,bbb.222,ccc.333";
66
+
67
+ String pattern = "\.|,"; // 区切り文字列
68
+
69
+ ```
70
+
71
+
72
+
73
+ Pattern.splitAsStream、Collectors.partitioningByを使います。
74
+
75
+ ```Java
76
+
77
+ import java.util.List;
78
+
79
+ import java.util.Map;
80
+
81
+ import java.util.regex.Pattern;
82
+
83
+ import java.util.stream.Collectors;
84
+
85
+ Map<Boolean, List<String>> m =
86
+
87
+ Pattern.compile(pattern)
88
+
89
+ .splitAsStream(source)
90
+
91
+ //.peek(System.out::println)
92
+
93
+ .collect(
94
+
95
+ Collectors.partitioningBy(x -> x.charAt(0) >= 'a')
96
+
97
+ );
98
+
99
+ System.out.println(m);
100
+
101
+ ```
102
+
103
+ 結果は、List<String>ですが、String[]への変換は容易なので省略。
104
+
105
+
106
+
107
+ Scalaは簡単にできるので、Java以外の言語ならもっと簡単になるのではないでしょうか。
108
+
109
+
110
+
111
+ ```Scala
112
+
113
+ val (a,b) = "[a-z]{3}|[0-9]{3}".r.findAllIn("aaa.111,bbb.222,ccc.333").partition(x => x.charAt(0)>='a')
114
+
115
+ ```