Java8 復習:色々なコレクションで ForEach してみる

Java8 の Stream API をお試しする。今回は色々なコレクション要素に対して ForEach する処理を書いてみた。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Java8ForEach {
  public static void main(String[] args) {
    // Array を ForEach
    String[] presidentsArray = {
      "Richard Nixon",
      "Gerald Ford",
      "Jimmy Carter",
      "Ronald Reagan",
      "George Bush",
      "Bill Clinton",
      "George Bush",
      "Barack Obama"
    };
    // 配列は Stream に変換してから操作する
    Arrays.stream(presidentsArray).forEach(president -> System.out.println(president));
    
    // List を ForEach
    List<String> presidentsList = new ArrayList<String>(){{
      add("Richard Nixon");
      add("Gerald Ford");
      add("Jimmy Carter");
      add("Ronald Reagan");
      add("George Bush");
      add("Bill Clinton");
      add("George Bush");
      add("Barack Obama");
    }};
    // 引数が1つならパーレン () は省略可能
    presidentsList.forEach(president -> System.out.println(president));
    
    // Map を ForEach
    Map<Integer, String> presidentsMap = new HashMap<Integer, String>(){{
      put(1969, "Richard Nixon");
      put(1974, "Gerald Ford");
      put(1977, "Jimmy Carter");
      put(1981, "Ronald Reagan");
      put(1989, "George Bush");
      put(1993, "Bill Clinton");
      put(2001, "George Bush");
      put(2009, "Barack Obama");
    }};
    // Map は引数が2つになるのでパーレン () が必要
    presidentsMap.forEach((key, value) -> System.out.println(key + " : " + value));
    
    // ループ内では continue・break は使えないので要注意。return すると continue に似た動きになる
  }
}

初歩的なところだが、JavaScript 脳だとウッカリしそうなのが配列の場合か。Java は当然ながら型が厳格なので、List と同じ感覚では扱えない。Stream に変換するイディオムを忘れないようにしないと。