Stream API とは?
Stream API
は Java8 で導入された機能です。配列やCollectionなどの集合体を扱う為のもので、
値の集計やデータを使った処理などが出来る便利なAPIです。
Streamを用いる事で、拡張for文を簡略化することが出来ます。
Streamの使い方
各要素の数をカウントする(count)
public class Sample {
public static void main(String[] args) {
List<String> JS = new ArrayList<>(Arrays.asList("Vue", "React", "Angular"));
long count = JS.stream().count();
System.out.println(count); // 3
}
}
各要素を条件で判定して抽出する(filter)
以下は、"Angular"を取り除いてリストを表示する処理です。
public class Sample {
public static void main(String[] args) {
List<String> JS = new ArrayList<>(Arrays.asList("Vue", "React", "Angular"));
JS.stream()
.filter(s -> !s.equals("Angular"))
.forEach(System.out::println); // Vue React
}
}
要素を並び替える(sorted)
2つ目のsortedメソッドは、引数にComparatorインターフェースのreverseOrderメソッドを指定している為、降順になります。
public class Sample {
public static void main(String[] args) {
List<String> JS = new ArrayList<>(Arrays.asList("Vue", "React", "Angular"));
JS.stream()
.sorted() // 引数を渡していないため昇順になる
.forEach(System.out::println); // Angular React Vue
JS.stream()
.sorted(Comparator.reverseOrder()) // 降順になる
.forEach(System.out::println); // Vue React Angular
}
}
要素の条件が全て一致するか(allMatch)
allMatch
メソッドは全て一致すれば true
を返します。
public class Sample {
public static void main(String[] args) {
List<Integer> num1 = new ArrayList<>(Arrays.asList(10,38,3));
boolean a = num1.stream()
.allMatch(b -> b > 10); //すべての要素は10より大きいか
System.out.println(a); //false
boolean c = num1.stream()
.allMatch(d -> d > 1); //すべての要素は1より大きいか
System.out.println(c); //true
}
}
要素の条件が1つでも一致するか(anyMatch)
anyMatch
メソッドは 1 つでも一致すれば true を返します。
public class Sample {
public static void main(String[] args) {
List<Integer> num1 = new ArrayList<>(Arrays.asList(10,38,3));
boolean a = num1.stream()
.anyMatch(b -> b > 40); //40より大きい要素はあるか
System.out.println(a); //false
boolean c = num1.stream()
.anyMatch(d -> d > 30); //30より大きい要素はあるか
System.out.println(c); //true
}
}
要素の条件が一致するものは1つもないか(noneMatch)
noneMatch
メソッドは一致が 1つもない場合に true
を返します。
public class Sample {
public static void main(String[] args) {
List<Integer> num1 = new ArrayList<>(Arrays.asList(10,38,3));
boolean a = num1.stream()
.noneMatch(b -> b > 7); //7より大きい要素はひとつもないか
System.out.println(a); //false
boolean c = num1.stream()
.noneMatch(d -> d > 40); //40より大きい要素はひとつもないか
System.out.println(c); //true
}
}