Lambda表达式
可以简单的理解为可传递的的匿名函数的一种方式,可以使用在函数式接口上,包含参数列表,函数体,返回类型,异常列表
基本语法:
// 标准写法
(parameters) -> { expression; }
// 函数体只有一行时,可以省略花括号
(parameters) -> expression
// 参数列表只有一个时,可以省略小括号
parameter -> expression
函数式接口
定义:函数式接口就是只定义一个抽象方法的接口(可以定义默认方法)
Lambda表达式可以为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例
Runnable runnable1 = () -> System.out.println("Hello World1");
Runnable runnable2 = new Runnable() {
@Override
public void run() {
System.out.println("Hello World2");
}
};
runnable1.run();
runnable2.run();
常用的函数式接口
Predicate
java.util.function.Predicate
Predicate接口定义了一个名叫test的抽象方法,它接受泛型T对象,并返回一个boolean
// 使用示例
public static void main(String[] args) {
List<String> list = Arrays.asList("斫峰之刃", "薙草之稻光", "四风原典", "天空之卷", "狼的末路", "风鹰剑", "阿莫斯之弓", "终末嗟叹之诗", "若水", "雾切之回光");
filter(list, weapon -> weapon.contains("之")).stream().forEach(System.out::println);
}
public static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
List<T> resultList = new ArrayList<>();
list.stream().forEach(item -> {
if (predicate.test(item)) {
resultList.add(item);
}
});
return resultList;
}
Consumer
java.util.function.Consumer
Consumer定义了一个名叫accept的抽象方法,它接受泛型T的对象,没有返回(void)
static List<String> list = Arrays.asList("斫峰之刃", "薙草之稻光", "四风原典", "天空之卷", "狼的末路", "风鹰剑", "阿莫斯之弓", "终末嗟叹之诗", "若水", "雾切之回光");
public static void main(String[] args) {
forEach(list, System.out::println);
}
public static <T> void forEach(List<T> list, Consumer<T> consumer) {
list.stream().forEach(item -> {
consumer.accept(item);
});
}
Function
java.util.function.Function<T, R>
Function接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。
static List<String> list = Arrays.asList("斫峰之刃", "薙草之稻光", "四风原典", "天空之卷", "狼的末路", "风鹰剑", "阿莫斯之弓", "终末嗟叹之诗", "若水", "雾切之回光");
public static void main(String[] args) {
map(list, String::length).forEach(System.out::println);
}
public static <T, R> List<R> map(List<T> list, Function<T, R> function) {
List<R> resultList = new ArrayList<>();
list.forEach(item -> {
resultList.add(function.apply(item));
});
return resultList;
}
标签:list,List,item,static,forEach,public,表达式,Lambda
From: https://www.cnblogs.com/duya12345/p/17101537.html