paiza.ioを使ってStreamの使い方を覚えた

概要

Java8からStreamAPIが使えるようになったが、Java9が出た今でもまともに使えなかったので覚えるためにサンプルを動かしてみた。 動かすのに、Eclipseでプロジェクト作って等々面倒だったため、paiza.ioを使ってみた。

参考にした記事

ソース

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) throws Exception {
        List<Integer> integerList = Arrays.asList(1,2,3,4,5);
        test1(integerList);
        test2(integerList);
    }
    
    //Streamを使用しない
    public static void test1(List<Integer> integerList){
        System.out.println("test1");
        for(Integer i : integerList){
            if(i % 2 == 0){
                System.out.println(i);
            }
        }
    }
    
    //Streamを使用
    public static void test2(List<Integer> integerList){
        System.out.println("test2");
        integerList.stream().filter(i -> i%2 == 0).forEach(i -> System.out.println(i));
    }
}

paiza.io

  • ブラウザ上の開発環境を使用してプログラムが実行できるサービス。
  • 公式はここ
  • 有料プランになるとサービスを公開できたりする。
  • 使用可能なプログラム言語は多岐に渡り、RubyJavaPHP等々。
  • GitHub連携も可能。

StreamAPI

  • Java8から導入された。java.util.stream
  • Collectionや配列の操作(集計、ひとつずつ取り出して比較等)が可能。

サンプルコード内で使用しているStreamAPIのメソッド

filter(Predicate<? super T> predicate)

ストリーム要素のうち、引数内の条件に一致するストリーム要素のStreamを返却する。 例:list.filter(i -> i==1)

forEach(Consumer<? super T> action)

ストリームの各要素に対してアクションを実施する。 例:forEach(System.out.println("test" + i));

サンプルコード内で使用しているその他APIのメソッド

Collection # stream()

  • コレクションをソースとして、逐次的なStream(該当コレクション内の要素に対する順次Stream)を返却する。
  • あたりまえだけどJava8から使用可能。

サンプルコードには使用していないけど関連するAPIのメソッド

Collection # parallelStream()

公式APIドキュメントより

このコレクションをソースとして、潜在的に並列のStreamを返します。このメソッドは順次ストリームを返すことができます。 戻り値はこのコレクション内の要素に対する、並列の可能性のあるStream

StreamのJavadoc

ここ

以上。