[Java]コレクション(List, Set, Map) に対し反復処理をする方法

プログラミング Java

はじめに

ListやSet、Mapなどのデータに反復処理を行う方法を備忘録のためにまとめておりますが、参考になれば幸いです。

この記事では、WEBアプリ開発の際にStream APIというAPIの実装方法を記載しております。注意点ですが、コードでは各クラスなどのimport文は省略しております。

開発環境

  • Java SE 8

使用する技術

  • Stream API

コード

public class MyApp {
    public static void main(String[] args) {
        List<Integer> scores = Arrays.asList(75, 85, 60, 45, 70);

        Stream<Integer> scoreStream = scores.stream();

        scoreStream
        .filter((Integer x) -> {
            return x >= 70;
        })
        .sorted((Integer x1, Integer x2) -> {
            return x1 - x2;
        })
        .forEach((Integer x) -> {
            System.out.println(x + "点");
        });
    }
}

コードの説明

  • 3行目
  • scoresという簡単なリストを作成。
  • 5行目
  • ListをStreamに変換(Streamに変換することで様々な処理を行うことができるようになります)。
  • 8〜10行目
  • scoreStreamというStreamに変換したリストに処理を実行します。
  • filterメソッドは要素の並び替えや条件による絞り込みなどを行うことができます。
  • ラムダ式という省略して記述することができる形式です。xにはscoreの一つ一つの値が代入され、70点以上のものを抽出しています。
  • 11〜13行目
  • sortedメソッドは並び替えを行うことができます。
  • 13行目のx1 – x2という記述は昇順に並び替えることができます(x2 – x1と変更することで降順にすることもできます)。
  • 14〜16行目
  • forEachメソッドは繰り返し処理を行うことができます。
  • 17行目のSystem.out.printlnで様々な変更を行ってきたscoreStreamを出力しております。
  • 出力結果は、「70点,75点,85点」 となります。

さいごに

今回はご紹介しておりませんが、以下のようなメソッドもあります。

  • mapメソッド。scoreStream.map(e -> e + 10) とすれば、すべてのスコアに10点ずつ加点することができます。
  • limitメソッド。scoreStream.limit(3) とすれば、3つの点数のみに絞り込みます。
  • countメソッド。scoreStream.count() とすれば、リストの要素数を取得できます。
  • ここでは基本的なもののみの紹介でしたが、他にも様々のメソッドがあります。