JDK1.8新特性 - Lambda表达式

本文深入探讨了Java中的Lambda表达式及其在函数式编程中的应用,详细讲解了Lambda的格式、省略规则及前提条件。介绍了常用函数式接口如Supplier、Consumer、Function和Predicate的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式

函数式编程思想:
面向对象: 必须通过对象的形式来做事情.
函数式思想: 强调做什么( 注重结果 ) , 而不是怎么做.

Lambda的格式:

●一些参数 ( ) 接口中的抽象方法的参数,有就写上,没有空着
●一个箭头 - > 传递:把参数传递给{}中的方法体
●一段代码 { } 重写接口中的抽象方法的方法体
标准格式:
              (参数类型 参数名称) ‐> { 代码语句 }

Lambda表达式的省略格式:

Lambda表达式的省略格式:
a.( ):( )中的参数,数据类型是可以省略的 (int a,int b)–>(a,b)
b.( ):( )中如果只有一个参数,那么类型和()都可以省略 (int a)–>a
       注意:如果没有参数()不能省略
c.{ }: ()中方法体,如果只有一行代码那么{ } return ;都可以省略
      注意:必须3个一起省略

代码如下:

     // 匿名内部类的写法.
     new Thread(new Runnable() { 
           @Override              
           public void run() {             
                 System.out.println("多线程任务执行!");                 
     }).start();

     // lambda表达式的写法
     new Thread( () -> System.out.println("多线程任务执行!") ).start();

Lambda的前提条件:

  1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。(函数式接口)
  2. 必须具有上下文推导。
    也就是方法的参数或局部变量类型必须为Lambda对应的接口类型

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

使用: 函数接口必须作为方法的参数使用

@FunctionalInterface:    // 用来检测一个接口是否为函数式接口
public interface MyFunctionalInterface { 
     // 抽象方法 
     public abstract void myMethod();      
}

常用的函数式接口:

1.Supplier: 生产数据
   抽象方法: T get(): 获取一个泛型参数指定类型的数据.

// 创建一个方法 , Supplier接口作为方法参数类型 ,
public static Integer getMax(Supplier<Integer> s){
     return s.get();
}

public static void main(String[] args) {
        // 调用getString方法 , 参数是一个函数式接口 , 可以使用lambda重写get()方法.
        String name = getString(() -> {
            return "小美女";
        });
        System.out.println(name);
    }

2.Consumer: 消费数据
   抽象方法: void accept(T t): 消费一个指定泛型的数据.
    默认方法: andThen(): 连接两个接口

    public static void main(String[] args) {
        // 调用方法 , 因为参数Consumer是一个函数式接口 , 所以可以使用lambda表达式.
        printString((String str)->{
            System.out.println(str+"被消费了!");
        },"老王");
    }

    // 定义一个方法 , 函数接口Consumer 作为参数 .
    public static void printString(Consumer<String> con , String s){
        con.accept(s);
    }
/*3.Function<T,R>接口:用于进行数据类型转换
    抽象方法:
        R apply(T t),根据类型T的参数获取类型R的结果。
*/     
public class Demo01_Function {
    public static void main(String[] args) {
        // 调用方法 , recever方法 , 因为函数接口Function是参数 , 所以可以用lanbda表达式.
        recever("100",(String s)->{
            return Integer.parseInt(s);
        });
    }

    // 创建一个方法 , Function函数接口作为参数 .
    public static void recever(String s , Function<String , Integer> fun){
        Integer apply = fun.apply(s);
        System.out.println(apply);
    }
}

4.Predicate接口:对某种类型的数据进行判断.
    抽象方法: test(T t) 判断.
   默认方法: and == &&
                   or == ||
                   negate == !

public class Demo01Predicate {
    public static void main(String[] args) {
        checkString("aadfjlfdk",(String s)->{
            return s.contains("a");
        });

    }

    // 定义一个方法 , Predicate接口作为参数
    public static void checkString(String s , Predicate<String> p){
        boolean test = p.test(s);
        System.out.println(test);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值