jdk8-Lambda簡介

爲何使用Lambda

Lambda能夠使表達更加簡潔,jdk8以前要想向方法傳入一個函數邏輯,不得不去實現一個接口,jdk8帶來的Lambda表達式能夠將函數做爲參數直接傳入方法內(至少看起來是這樣)。數組

提及Lambda在jdk8中強大,就不得不提jdk8帶來的Stream API,Stream API分爲中間操做和終端操做,函數

經常使用的中間操做包括:filter(過濾), map(映射,好比將某個對象映射爲其惟一ID), distinct(使用equals去重), sorted(使用Comparator排序), skip(跳過n個), limit(限制最大個數n)spa

經常使用的終端操做包括:code

  1. forEach(遍歷), toArray(返回數組), collect(將處理好的流收集到一個容器中,好比List), reduce(聚合), count, min(使用Comparator取最小), max
  2. findFirst, findAny, anyMatch, allMatch, noneMatch

 

函數接口

1 @FunctionalInterface
2 public interface Comparator<T> {
3   int compare(T o1, T o2);
4   boolean equals(Object obj);
5   //other methods ...
6 }

Comparator就是一個函數接口,所謂函數是指只有一個有效抽象方法的接口,這裏的有效抽象方法不包括Object中的方法,任何一個只有一個有效抽象方法的接口均可以做爲函數接口使用,即使沒有被@FunctionalInterface註解。對象

函數接口是如何工做的呢?blog

1 List<String> list = new ArrayList<>();
2 //add elements ...
3 list.stream().filter(p -> p.length() > 3);

filter的入參是一個Predicate函數接口,該函數接口有一個抽象方法test,能夠將filter(Predicate predicate)當作是以下處理排序

 1 Stream<T> filter(Predicate<? super T> predicate){
 2     for (each string in stream){
 3          if(predicate.test(string)){
 4              keep the string
 5          }else{
 6              drop the string
 7          }
 8  
 9     return stream;
10 }
相關文章
相關標籤/搜索