Java8のStream

Java8からjava.util.stream.Streamというコレクションを便利に操作するクラスができました。

・foreach

今まではコレクションをループする時はfor文や拡張for文を使用していましたが、foreachを使えば簡単に記述することができるようになります。

Listのstreamを取得してforeachでループする例です。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public  static void main(String[] args) {
    List list = Arrays.asList("C", "C++", "Java", "Scala", "Ruby");
    list.stream().forEach(s -> System.out.println(s));
  }
}

・allMatch

各要素に対して全てが条件を満たすならtrueを返し、そうでなければfalseを返します。

Listのstreamを取得してallMatchで走査する例です。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("C", "C++", "Java", "Scala", "Ruby");
    boolean flg = list.stream().allMatch(s -> s.contains("C"));
    System.out.println(flg);
  }
}

・anyMatch

allMatchに対して、各要素の一つでも条件を満たすならtrue、全ての要素が条件を満たさないならfalseを返します。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("C", "C++", "Java", "Scala", "Ruby");
    boolean flg = list.stream().anyMatch(s -> s.contains("C"));
    System.out.println(flg);
  }
}

・filter

filterはその名の通り、条件を満たす要素のみにフィルタリングします。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("C", "C++", "Java", "Scala", "Ruby");
    list.stream().filter(s -> s.contains("C"))
                 .forEach(System.out::println);
  }
}

・map

mapは各要素を別の型に変換してくれます。以下はString型の各要素をInteger型に変換している例です。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("2","4","3","02");
    list.stream().map(Integer::parseInt)
                 .forEach(System.out::println);
  }
}

・mapToInt

・sum

オブジェクトをプリミティブ型に変換するメソッドです。以下はプリミティブ型に変換してsumメソッドで合計している例です。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("2","4","3","02");
    int count = list.stream().mapToInt(Integer::parseInt)
                             .sum();
    System.out.println(count);
  }
}

・distinct

各要素で重複している要素を取り除くメソッドです。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("C","C++","C","Java","java");
    list.stream().distinct()
                 .forEach(System.out::println);
  }
}

・sorted

各要素を昇順にソートします。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("3","2","8","4","1");
    list.stream().sorted()
                 .forEach(System.out::println);
  }
}

・peek

peekは中間操作です。終端操作があって初めて評価されますが、peek自体はどういう値が入っているかなどを調べたい場合に使うメソッドです。

import java.util.Arrays;
import java.util.List;

public class Sample {
  public static void main(String[] args) {
    List<Integer> list = Arrays.asList(3,2,8,4,1);
    list.stream().filter(i -> i > 3).peek(x -> System.out.println(x))
                                    .count();
  }
}

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA