[Java]ストリームと並列処理②


[ストリームのタイプ]
Java 8から新たに追加されたjava.util.streamパケットには、ストリームAPIが含まれている.パッケージの内容を見ると、BaseStreamインタフェースを親とし、サブインタフェースには以下の継承関係があります.
  • BaseStreamインタフェースは、すべてのストリームで使用可能な汎用メソッドのみを定義します.
    つまり、コードでは直接使用されません.
  • 下流Stream、IntStream、LongStream、DoubleStreamは直接使用されるStreamです.
  • Streamは、オブジェクト要素を処理するストリームであり、
  • IntStream、LongStream、DoubleStreamは、それぞれ基本タイプint、long、doubleStreamを処理するストリームです.
  • このストリームインタフェースのインプリメンテーションオブジェクトは、異なるソースから取得できます.
    主にコレクションと配列から取得されますが、次のソースからストリーム実装オブジェクトを取得することもできます.

    1.コレクションからストリームを取得
    次の例では、List<Student>のセットからStream<Student>を取得し、要素をコンソールに出力します.
  • FromCollectionExample
  • import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Stream;
    
    public class FromCollectionExample {
        public static void main(String[] args) {
            List<Student> studentList = Arrays.asList(
                    new Student("김", 10),
                    new Student("이", 20),
                    new Student("박", 30)
            );
    
            Stream<Student> stream = studentList.stream();
            stream.forEach(s -> System.out.println(s.getName()));
        }
    }
  • 運転結果
  • 김
    이
    박
    2.アレイからストリームを取得
  • FromArrayExample
  • import java.util.Arrays;
    import java.util.stream.IntStream;
    import java.util.stream.Stream;
    
    public class FromArrayExample {
        public static void main(String[] args) {
            String[] strArray = {"김", "이", "박"};
            Stream<String> strStream = Arrays.stream(strArray);
            strStream.forEach(a -> System.out.print(a + ", "));
            System.out.println();
    
    
            int[] intArray = {1, 2, 3, 4, 5};
            IntStream intStream = Arrays.stream(intArray);
            intStream.forEach(a -> System.out.print(a + ", "));
            System.out.println();
        }
    }
    
  • 運転結果
  • 김, 이, 박, 
    1, 2, 3, 4, 5,
    3.数値範囲からストリームを取得
    InteStream()のrangeClosed()法を用いて1から100の和を求めることができる.rangeClosed()メソッドは、1番目から2番目に順次提供されるIntStreamを返す.
    IntStreamの別のrange()メソッドも同じIntStreamを返しますが、2番目のパラメータ値は含まれません.
  • FromIntRangeExample
  • import java.util.stream.IntStream;
    
    public class FromIntRangeExample {
    
        public static int sum;
    
        public static void main(String[] args) {
            IntStream stream = IntStream.rangeClosed(1, 100);
            stream.forEach(a -> sum += a);
            System.out.println("총합: " + sum);
    
        }
    }
  • 運転結果
  • 총합: 5050
    [参考資料]
    これはジャワの本です.