记forEach(System.out::println)用法

记forEach(System.out::println)用法

示例代码如下:

//创建list
List<String> list = Arrays.asList("123","456");
//输出list里面的每个内容
list.forEach(System.out::println);

运行结果: 其中,list.forEach(System.out::println);方法相当于以下代码的功能:

for(int i = 0; i < list.size(); i++) {
          
   
    System.out.println(list.get(i));
}

例如:@FunctionalInterface public interface FuncA {

void doSomeThing(String str);

}那么上面这种接口就可以直接写作:FuncA funcA = (str) -> { System.out.println(“hello”);};类似的还有Swing或者javaFx的监听器:btn.addActionListener(e->{ // do something});这样就省去了之前需要专为他编写一个实现类或者匿名内部类的代码,直接对接口进行实现。而在这之上,如果一个方法的调用中,这个方法给接口提供的参数和他接收的返回,和你现有某个实现完全一致,就可以进一步进行简化,称为方法引用。forEach方法提供一个某种类型的Object(具体是什么类型是要看Stream类的泛型参数的,不过一般就是这个集合提供的那种类型),而System.out.println可以接受一个Object,因此,forEach提供的参数和System.out.println的参数类型是一致的,可以进行这种简写。具体来说就是:原本应该写为:.forEach(element -> {System.out.println(element)})但是System.out.println的参数和传递的参数element 的类型完全匹配,所以这样的时候就可以简化为:.forEach(System.out::println)

经验分享 程序员 微信小程序 职场和发展