package aaa.javaConsumer;
import java.util.ArrayList;
import java.util.function.Consumer;
/**
* 关于Java consumer和lambda特性一些练习(::)
*/
public class ConsumerDemo {
/**
* 两个方法 都用了Consumer,Consumer<String> consumer = xxxx 即 Consumer对象被"赋值"了一个具体的方法或者是逻辑
* 然后Consumer对象的accept只有一个参数,且没有返回值 且accept(xx)本身就是调用上方的逻辑
*/
// 静态方法-Consumer的实现1
public static void TestConsumer(String a) {
Consumer<String> consumer = (aa) -> {
System.out.println("字符" + aa);
};
consumer.accept(a);
}
// 非静态-Consumer的实现2
public void noStaticTestConsumer(Integer b) {
Consumer<Integer> consumer = (aa) -> {
System.out.println("数字" + aa);
};
consumer.accept(b);
}
/**
* lambda中的简写
* 即像scala匿名函数 只不过样式是()->{} 而不是()=>{}
* 下方两个样例 前者是缩写为::实现调用 后者就是()->{}使用
*
* 下方样例最简单的理解就是用一个动态数组,add几个元素进去。再用forEach表示处理每个元素,而forEach()的参数,就是具体每个元素要经过的处理逻辑。
* 这里的逻辑,就是上方定义好的方法中的逻辑。样例中就是println,当然用其他无返回值且只有一个参数的方法也行
*/
public static void main(String[] args) {
TestConsumer("diyi");
ConsumerDemo consumerDemo = new ConsumerDemo();
consumerDemo.noStaticTestConsumer(100);
System.out.println("==========下方为lambda的::演示部分结果==========");
System.out.println("==========1、(::)简写==========");
//ArrayList<String> 对象用foreach把每个元素都经过TestConsumer方法处理一边
ArrayList<String> arr1 = new ArrayList<String>();
arr1.add("a");
arr1.add("b");
arr1.add("c");
/**
* 通常都使用forEach 且forEach的参数就是<? super String>
*/
arr1.forEach(ConsumerDemo::TestConsumer);
System.out.println("==========2、()->{}方式 ==========");
ArrayList<Integer> arr2 = new ArrayList<Integer>();
arr2.add(111);
arr2.add(222);
arr2.add(333);
arr2.forEach((xx) -> consumerDemo.noStaticTestConsumer(xx));
}
}
/**
* 输出结果:
* 字符diyi
* 数字100
* ==========下方为lambda的::演示部分结果==========
* 字符a
* 字符b
* 字符c
* 数字111
* 数字222
* 数字333
*/
Java 8关于 lambda&Consumer简单样例
于 2022-04-08 11:32:14 首次发布
本文通过实例展示了如何在Java中使用Consumer接口和Lambda表达式,包括静态和非静态方法的实现,并深入讲解了lambda表达式的简写形式,以及在列表操作中的应用。

362

被折叠的 条评论
为什么被折叠?



