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

回答編集履歴

1

最新の回答を追加

2019/02/27 04:04

投稿

退会済みユーザー
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
  ```