转载

jdk8中的lambda表达式

lambda表达式

lambda的优化

JDK8中可以使用以下简略写法

new Thread(() -> System.out.println("多线程任务执行!")).start(); // 启动线程
Arrays.sort(array,(a,b)->a.getAge()-b.getAge())    //排序

Lambda的格式

标准格式:
(参数类型 参数名称) -> { 代码语句 }

省略格式:
(a,b)->{代码}

Lambda的前提条件

  • 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。如Runnable和Comparator //函数式接口
  • 使用Lambda必须具有接口作为方法参数。

函数式接口

定义

函数式接口:有且仅有一个抽象方法的接口。

格式

修饰符 interface 接口名称 {
     public abstract 返回值类型 方法名称(可选参数信息); // 其他非抽象方法内容 
}

自定义函数式接口

@FunctionalInterface    //可写可不写,类似于@Override
public interface MyFunctionalInterface { void myMethod(); } //定义一个接口

public class Demo07FunctionalInterface { // 使用自定义的函数式接口作为方法参数 
    private static void doSomething(MyFunctionalInterface inter) {         
        inter.myMethod(); // 调用自定义的函数式接口方法 
    }
    
    public static void main(String[] args) { // 调用使用函数式接口的方法 
        doSomething(() -> System.out.println("Lambda执行啦!")); 
    } 
}

常用函数式接口

Consumer接口

Consumer<T>接口是消费一个数据,抽象方法accept,基本使用如下:
//给你一个字符串,请按照大写的方式进行消费 
import java.util.function.Consumer; 
public class Demo08Consumer {
     public static void main(String[] args) {
          String str = "Hello World"; 
          //1.lambda表达式标准格式 
          fun(str,(String s)->{ System.out.println(s.toUpperCase());});             
          //2.lambda表达式简化格式
          fun(str,s-> System.out.println(s.toUpperCase())); 
     }
          /* 定义方法,使用Consumer接口作为参数 fun方法: 
          消费一个String类型的变量 */ 
     public static void fun(String s,Consumer<String> con) {
        con.accept(s); 
     } 
}

Predicate接口

Stream流

原文  https://segmentfault.com/a/1190000020257313
正文到此结束
Loading...