基本的なStream処理(条件分岐、一括処理、ソート)
java
// rangeメソッドはInt/LongStreamでのみ使用できる。Stream<Integer>では使用できない
IntStream.range(0, 10)
.filter(i -> i % 2 == 1)
.map(i -> i * 10)
.sorted()
.forEach(System.out::println);
// ソート手段を指定する場合ボクシングが必要。自然順はnaturalOrder
IntStream.range(0, 10)
.filter(i -> i % 2 == 1)
.map(i -> i * 10)
.boxed().sorted(Comparator.reverseOrder())
.forEach(System.out::println);
10
30
50
70
90
90
70
50
30
10
二重のStream処理(map使用/全ての要素に対してFunctionを適用する。)
java
// 行いたい文字列精査のリスト
List<UnaryOperator<String>> vatidators = new ArrayList<>();
vatidators.add(str -> str.length() < 10 ? "" : "strは10文字未満にしてください。");
vatidators.add(str -> str.length() >= 4 ? "" : "strは4文字以上にしてください。");
vatidators.add(str -> !str.contains("×") ? "" : "strに不正な文字が含まれています。");
vatidators.add(str -> str.contains("は") ? "" : "strに必要な文字が含まれていません。");
// 精査対象の文字列リスト
List<String> strList = Arrays.asList("×", "" , "今日は良い天気");
// 各文字列すべてに対してリスト内の精査を行う
List<List<String>> results = strList.stream()
.map(str -> vatidators.stream()
.map(valid -> valid.apply(str))
.filter(s -> !"".equals(s))
.collect(Collectors.toList()))
.collect(Collectors.toList());
// 結果を表示
results.forEach(System.out::println);
[strは4文字以上にしてください。, strに不正な文字が含まれています。, strに必要な文字が含まれていません。]
[strは4文字以上にしてください。, strに必要な文字が含まれていません。]
[]