Streamの生成処理
で生成したStreamの対して様々処理を与える部分。
ここではまだListを生成したり、文字列として出力したりなどは行わない。
この記事では例として、すべての終端処理にListを再生成させておく
map
ラムダ式や関数を用いて要素を変換したい場合に用いる。
// ラムダ式
List<Integer> actual = list.stream().map(s->s.length()).collect(Collectors.toList());
// メソッド参照
List<Integer> actual = list.stream().map(String::length).collect(Collectors.toList());
filter
条件式によってStreamの要素の絞りこみを行いたいときに用いる
List<String> actual = list.stream().filter(s -> s.equals("b")).collect(Collectors.toList());
distinct
要素の重複削除を行う
List<String> list = Arrays.asList("a","a","b","b","c");
List<String> actual = list.stream().distinct().collect(Collectors.toList());
// a,d,c
peek
Stream自体の要素に影響を与えない処理を行いたい場合に使用する
List<String> actual = list.stream().peek(System.out::println).collect(Collectors.toList());
Sorted
文字通りソートを行いたい場合に使用する
// 昇順
List<String> actual = list.stream().sorted().collect(Collectors.toList());
// 降順
List<String> actual =list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
skip
要素のn番目から取得したい場合に用いる。
それより前の要素は捨てられるので注意
List<String> list = Arrays.asList("a","b","c","d","e");
list.stream().skip(2).peek(System.out::println).collect(Collectors.toList());
// c,d,e
limit
先頭からn個を取得したいときに用いる
List<String> list = Arrays.asList("a","b","c","d","e");
list.stream().limit(3).peek(System.out::print).collect(Collectors.toList());
/// a,b,c
list.stream().skip(2).limit(2).peek(System.out::print).collect(Collectors.toList());
// c,d