Java-関数式プログラミング、Lambda式

2938 ワード

Lambda式
	public void expr1() {
		/*
		 *         ,  lambda             、–>           
		 */
		Arrays.asList("a", "b", "c").forEach(e -> System.out.println(e));
		Arrays.asList(1, 2, 3).forEach((Integer e) -> {
			e *= 2;
			System.out.println(e);
		});
	}

Java標準ライブラリのjava.lang.Runnableとjava.util.Comparatorは、典型的な関数インタフェースです.
Comparatorインタフェース-関数ソート
	public void expr2() {
		/*
		 * 1. Lambda        
		 * 2.                  
		 * 3.   lambda          ,          return  
		 */
		List list = Arrays.asList(5, 7, 2, 3); 
		//Lambda   “(x, y) -> y - x”   java.util.Comparator  
//		list.sort((e1, e2) -> e1.compareTo(e2)); //   
		list.sort((e1, e2) -> e2.compareTo(e1)); //   
		System.out.println(list);
	}

Runnableインタフェース
import org.junit.Test;

public class ThreadUseLambda {
	/*
	 *        :
	 *       Java               ,     lambda          
	 *   :
	 * Java     java.lang.Runnable java.util.Comparator          
	 */
	public void sum(int a, int b) {
		System.out.println(a+b);
	}
	@Test
	public void runThreadUseLambda() {
		//   1
	    new Thread(() -> {
	        sum(1, 3);
	    }).start();
	    //   2
	    new Thread(() -> {
	    	sum(2, 4);
	    }).start();
	}
}

関数インタフェースFunction
Java SE 8が追加されました java.util.function パッケージは、開発で使用できる関数式インタフェースです.開発者は、新しい関数インタフェースを作成することもできます.
package redis.practice;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

public class CollectionUtils {
	/*
	 * map   :
	 *   : input; processor -> Function -> T,   ; R,    
	 */
    public static  List map(List input, Function processor) {
        ArrayList result = new ArrayList();
        for (String obj : input) {
        	// Function apply ->         
            result.add(processor.apply(obj));
        }
        return result;
    }
    public static void main(String[] args) {
        List input = Arrays.asList(new String[] {"apple", "orange", "pear"});
        List lengths = CollectionUtils.map(input, (String v) -> String.valueOf(v.length()));
        List uppercases = CollectionUtils.map(input, (String v) -> v.toUpperCase());
        System.out.println(lengths);
        System.out.println(uppercases);
    }
}

ブログ参照
公式ドキュメント
メソッドと構築メソッドの参照
List input = Arrays.asList(new String[] {"apple", "orange", "pear"});
input.forEach((v) -> System.out.println(v));
input.forEach(System.out::println);
List dateValues = Arrays.asList(new Long[] {0L, 1000L});
List dates = CollectionUtils.map(dateValues, Date::new);