古 (いにしえ) の「for ループ」や「Iterator」から、Java 8 の「ラムダ式」や「メソッド参照」までを使って、List の要素を出力するサンプルプログラムを書いてみた。


import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;

public class Hoge{

  public static void main(String[] args){
  
    final List<String> names =
      Arrays.asList("Alice", "Bob", "Carol");

    // for ループ
    System.out.println("[for loop]");
    for(int i=0; i<names.size(); i++){
      System.out.println(names.get(i));
    }  

    // Iterator
    System.out.println("[Iterator]");
    for(Iterator it=names.iterator(); it.hasNext();){
      System.out.println(it.next());
    }  

    // Iterator (Java 5)
    System.out.println("[Iterator (Java 5)]");
    for(String name : names){
      System.out.println(name);
    }  

    // Iterable#forEach and Consumer#accept 匿名内部クラス
    System.out.println("[Iterable#forEach and Consumer#accept]");
    names.forEach(new Consumer<String>(){
      public void accept(final String name){
        System.out.println(name);
      }
    });

    // Iterable#forEach and ラムダ式
    System.out.println("[Iterable#forEach and Lambda expression]");
    names.forEach((final String name) -> System.out.println(name));
  
    // Iterable#forEach and ラムダ式
    System.out.println("[Iterable#forEach and Lambda expression]");
    names.forEach((name) -> System.out.println(name));

    // Iterable#forEach and ラムダ式
    System.out.println("[Iterable#forEach and Lambda expression]");
    names.forEach(name -> System.out.println(name));

    // Iterable#forEach and メソッド参照
    System.out.println("[Iterable#forEach and Method Reference]");
    names.forEach(System.out::println);
  }
}

オライリーから出版されている書籍 Javaによる関数型プログラミング Java 8ラムダ式とStream が参考になった。

tags: java

Posted by NI-Lab. (@nilab)