JavaのStream API

# はじめに
`Java` 皆さんお使いでしょうか！
自分は最近何かと書くことが多いですが、 `Stream API` が実装されてからかなり便利になった気がします。
`Stream.forEach` や、 `Stream.filter` といった代表的なものはパッと出てきますが、
あまり使用しないものは出てこなかったりするので、覚書のために残しておきます。

# Stream.generate
順序付けされていない、無限Streamを作成します。
乱数の生成など、関連性のない値の作成時に便利です。

ドキュメント：[docs](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html#generate-java.util.function.Supplier-)

## コード
```java
    public static void main(String[] args) {
        Stream<Double> stream = Stream.generate(() -> Math.random());
        stream.limit(5).forEach(System.out::println);
    }
```
## 結果
```java
0.022804976867977667
0.06422820749702451
0.7240936837411123
0.9070898332933144
0.6724389714182997
```






# Stream.anyMatch
`Predicate<T>` をパラメータとして、1つでも条件に合致する値があればtrueを返します。

ドキュメント：[docs](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html#anyMatch-java.util.function.Predicate-)

## コード
```java
    public static void main(String[] args) {
        List<String> strList = Arrays.asList("dog", "cat", "bird");
        boolean match = strList.stream().anyMatch(e -> e.equals("dog"));
        System.out.println(match);
    }
```
## 結果
```java
true
```

# Stream.allMatch
`Predicate<T>` をパラメータとして、全て条件に合致する値であれば trueを返します。

ドキュメント：[docs](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html#allMatch-java.util.function.Predicate-)

## コード
```java
    public static void main(String[] args) {
        List<String> strList = Arrays.asList("dog", "cat", "bird");
        boolean match = strList.stream().allMatch(e -> e.equals("dog"));
        System.out.println(match);
    }
```
## 結果
```java
false
```

# Stream.noneMatch
`Predicate<T>` をパラメータとして、条件に合致する値が一つも無かったら trueを返します。

ドキュメント：[docs](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html#noneMatch-java.util.function.Predicate-)

## コード
```java
    public static void main(String[] args) {
        List<String> strList = Arrays.asList("dog", "cat", "bird");
        boolean match = strList.stream().noneMatch(e -> e.equals("fish"));
        System.out.println(match);
    }
```
## 結果
```java
true
```

# Stream.takeWhile
`Predicate<T>` をパラメータとして、条件に合致する間の値を返却します。
下記の例では、0未満の数字を返却します。

ドキュメント：[docs](https://docs.oracle.com/javase/jp/9/docs/api/java/util/stream/Stream.html#takeWhile-java.util.function.Predicate-)

## コード
```java
    public static void main(String[] args) {
        List<Integer> numList = Arrays.asList(
                -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
        );
        numList.stream().takeWhile(x -> x < 0).forEach(System.out::println);
    }
```
## 結果
```java
-5
-4
-3
-2
-1
```

# Stream.dropWhile
`Predicate<T>` をパラメータとして、条件に合致しない間の値を返却します。
下記の例では、0以上の数字を返却します。

ドキュメント：[docs](https://docs.oracle.com/javase/jp/9/docs/api/java/util/stream/Stream.html#dropWhile-java.util.function.Predicate-)

## コード
```java
    public static void main(String[] args) {
        List<Integer> numList = Arrays.asList(
                -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
        );
        numList.stream().dropWhile(x -> x < 0).forEach(System.out::println);
    }
```
## 結果
```java
0
1
2
3
4
5
```

# 最後に
`StreamAPI` 非常に便利ですよね。
積極的に使っていき、直感的に理解できるコードを目指していきたいものです。
短いですが以上です。ありがとうございました！