解释
可以吧Lambda表达式理解为简洁的表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表,又函数主体,可能还有一个可以抛出的异常列表.(行为参数化)
语法
(params) -> expression
或者
(params) -> {statements;}
- 参数列表
接口中方法的参数列表
- 箭头
-> 把参数列表和Lambda表达式分开
- Lambda主体
接口方法中函数的执行主体和返回值
使用地方
Lambda表达式,需要在函数式接口上使用
函数式接口
函数式接口 就是纸定义了一个抽象方法的接口.例如 Comparator ,Runnable,Callable,Predicate,Consumer,Funciotn
注意:在java8中接口吸纳在还可以拥有默认方法.哪怕接口又很多默认方法,质押接口之定义了一个抽象方法,它仍旧是一个函数式接口
实例代码
//Consumer
package com.cyl.www.cylBoot.java8;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
/**
* ${DESCRIPTION}
*
* @Author: DianXiao2
* @Date: Created in 2018-01-18 下午3:11
* @Modified by:
**/
public class ConsumerTest {
public static <T> void forEach(List<T> list, Consumer<T> c){
for(T t : list){
c.accept(t);
}
}
public static void main(String[] args) {
forEach(Arrays.asList(1,3,4,5,6),(Integer i) -> {int m = i+2;
System.out.println(m);});
}
}
package com.cyl.www.cylBoot.java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
/**
* ${DESCRIPTION}
*
* @Author: DianXiao2
* @Date: Created in 2018-01-18 下午3:18
* @Modified by:
**/
public class FunctionTest {
public static <T,R> List<R> map(List<T> list , Function<T,R> f){
List<R> result = new ArrayList<>();
for(T t : list){
result.add(f.apply(t));
}
return result;
}
public static void main(String[] args) {
List<String> list = Arrays.asList("caoyulong","huzhuohui");
List<Integer> result = map(list,(String s) -> s.length());
System.out.println(result);
}
}
package com.cyl.www.cylBoot.java8;
import com.cyl.www.cylBoot.java8.interfaceTest.Predicate;
import java.util.ArrayList;
import java.util.List;
/**
* ${DESCRIPTION}
*
* @Author: DianXiao2
* @Date: Created in 2018-01-18 下午3:04
* @Modified by:
**/
public class PredicateTest {
public static <T> List<T> filter(List<T> list, Predicate<T> p){
List<T> result = new ArrayList<>();
for(T t : list){
if(p.test(t)){
result.add(t);
}
}
return result;
}
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for(int i = 0 ; i < 10 ; i++){
list.add("hhhh"+i);
}
List<String> result = filter(list , (String s) -> !s.isEmpty());
System.out.println(result);
}
}