LoginSignup
5
4

More than 5 years have passed since last update.

Java8:Streamをひたすら使ってみる

Posted at

基本的な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に必要な文字が含まれていません。]
[]
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4