现象:
Consumer功能接口
- 用来作为lambda表达式或方法引用的任务目标——传递一个参数执行指定的方法
- 是一个接受单一参数并且不返回任何结果的操作
实现:
1:forEach 参数接收的就是Consumer接口
2:forEach的调用 传入的就是 accept方法的实现
3:分开实现演示 先创建consumer接口 实现accept方法
在传入forEach方法
4:Consumer 接口源码 只有两个方法 accept 和 andThen
实例:
1.Consumer accept 的简单使用
创建方法 testConsumer方法 接收value 和函数consumer 函数调用accept执行
给参数name 789 拼接参数 -123
2.Consumer andThen的简单使用
函数先执行了accept 然后在执行了andThen
accept 拼接 -123
andThen 拼接 -456
打印结果 先打印789-123 然后才是 789-456
**源码:**先执行了accept
代码实现:
private static void consumerTest() {
// 使用consumer接口实现方法
Consumer<String> consumer = new Consumer<String>() {
public void accept(String s) {
System.out.println(s);
}
};
List<String> list = List.of("111", "222", "333", "444", "555");
list.forEach(consumer);
System.out.println("============================================");
// 使用lambda方法实现
Consumer<String> c = (s) -> System.out.println(s);
list.forEach(c);
System.out.println("============================================");
// :: 方法实现
Consumer<String> d = System.out::println;
list.forEach(d);
}
supplier接口
提供一个泛型容器 和get方法
get方法获取内容
1:源码 只有一个get方法
实现
1:使用supplier接口实现方法
创建一个 Supplier 对象,实现了一个 get 方法,
get方法无参数,返回一个值
Supplier<String> supplier = new Supplier<>() {
@Override
public Integer get() {
return "字符串返回";
}
};
2:使用lambda表达式实现
// lambda表达式实现
Copier<Integer> integerCopier = () -> new Random().nextInt();
System.out.printf("lambda实现:"+supplier.get());
System.out.println("============================================");
3:使用 :: 实现
// :: 方法实现
Copier<Double> random = Math::random;
System.out.printf("lambda实现:"+supplier.get());
实例:
1:创建一个方法 参数是Supplier
调用get方法打印
2:调用方法传入一个新的Supplier接口 实现get方法 返回字符串 123456
3:结果