JDK1.8 Lambda 表达式的学习

35 篇文章 1 订阅

1、Lambda  表达式

Lambda 表达式(也称为闭包)是整个Java8发行版本中最受期待的在Java语言层面上的改变,Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据,Lambda 表达式用于简化Java中接口式的匿名内部类,被称为函数式接口的概念,函数式接口就是一个具有一个方法的普通接口,像这样的接口,可以被隐式转换为Lambda 表达式。

语法:

(参数1,参数2...)->(...)

(1)没有参数的时候使用Lambda 表达式

(2)带参数时使用Lambda 表达式

(3)代码块中只一句代码时使用Lambda 表达式

(4)代码块中有多句代码时使用Lambda 表达式

(5)有返回值的代码块

(6)参数中使用final 关键字

/**
 * @Date: 2018/12/8 10:23
 * @Description:
 */
public class LambdaDemo {

//    public static void main(String args[]) {
//        IEat iEat = new IEatImpl();
//        iEat.eat();
//
//        //匿名内部类的使用
//        IEat iEat1 = new IEat() {
//            public void eat() {
//                System.out.println("eat banana");
//            }
//        };
//        iEat1.eat();
//
//        //Lambda 表达式
//        //好处:1.代码更加的简介;2.不会单独生成class文件
//        //一个接口中只有一个方法的时候能使用Lambda 表达式
//        //如果一个接口有多个方法就不能使用Lambda 表达式,只能用传统的匿名内部类
//        //IEat iEat2 = () ->{ System.out.println("eat peach");};
//
//        //没有参数时候的使用
//        IEat iEat2 = () -> System.out.println("eat peach");
//        iEat2.eat();
//    }

    public static void main(String args[]) {

        //1.带参数时使用,参数的类型可以省略
//        IEat iEat = (thing,name) -> System.out.printf("eat:", thing + "...." + name);
//        iEat.eat("apple","anf");

        //2.带参数时使用,参数的类型可以省略,代码中有多行参数
//        IEat iEat = (thing,name) -> {
//            System.out.printf("eat:", thing);
//            System.out.println(name);
//        };
//        iEat.eat("apple","anf");

        //3.带返回值的方法
//        IEat iEat = (thing , name) ->{
//            System.out.println(name + "eat" + thing);
//            int i = 10;
//            return i;
//        };
//        iEat.eat();

        //4.带返回值的方法中只有一句实现代码
//        IEat iEat = (thing , name) -> thing == null?1:0;
//        iEat.eat();

        //5.参数中使用final 关键字
//        IEat iEat = (final String thing ,final String name) -> thing == null?1:0;
//        iEat.eat();
    }
}

//只有一个抽象方法的接口
interface IEat{
    public void eat();

    public void eat(final String thing,final String name);
}

//实现类
class IEatImpl implements IEat{

    public void eat() {
        System.out.println("eat apple");
    }

    @Override
    public void eat(String thing,String name) {
        System.out.println("string thing");
    }
}

2.接口中的默认方法和静态方法

interface A{
   public default void print(){};
   public static void method(){};
}

默认方法与静态方法并不影响函数式接口的契约,可以任意使用。

package demo;

import lombok.Data;

/**
 * @Date: 2018/12/8 11:14
 * @Description:
 */
@Data
public class Student {

    private String name;
    private Integer age;

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}
import demo.Student;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @Date: 2018/12/8 10:23
 * @Description:
 */
public class LambdaDemo {

    public static void main(String args[]) {


        //排序
        //Comparator<Student> comparator = (o1,o2) ->o1.getAge() - o2.getAge();
        Arrays.sort(students,(o1,o2) ->o1.getAge() - o2.getAge());
        System.out.println(Arrays.toString(students));
    }
}

//只有一个抽象方法的接口
interface IEat{
    public void eat();

    public void eat(final String thing,final String name);

    //默认方法, 默认方法与静态方法并不影响函数式接口的契约,可以任意使用。
    public default void print(){
        System.out.println("print test");
    }

    //静态方法 ,默认方法与静态方法并不影响函数式接口的契约,可以任意使用。
    public static void method(){
        System.out.println("static method");
    }

}

//实现类
class IEatImpl implements IEat{

    public void eat() {
        System.out.println("eat apple");
    }

    @Override
    public void eat(String thing,String name) {
        System.out.println("string thing");
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 JDK 1.8 中引入了 Lambda 表达式,它是一种简洁而强大的编程语法,用于支持函数式编程。Lambda 表达式可以用来替代一些需要使用匿名内部类的情况,并提供了更简洁的语法来定义函数式接口的实现。 Lambda 表达式的基本语法如下: ```java (parameters) -> { body } ``` 其中,parameters 是参数列表,可以为空或包含一个或多个参数,多个参数之间使用逗号分隔。body 是 Lambda 表达式的主体,可以是一个表达式或一段代码块。 下面是一些常见的 Lambda 表达式用法示例: 1. Lambda 表达式作为函数式接口的实现: ```java // 定义一个函数式接口 interface MyInterface { void doSomething(); } // 使用 Lambda 表达式实现函数式接口 MyInterface lambda = () -> { System.out.println("Doing something..."); }; // 调用 Lambda 表达式 lambda.doSomething(); ``` 2. Lambda 表达式作为参数传递给方法: ```java // 定义一个接受函数式接口作为参数的方法 void performAction(MyInterface action) { action.doSomething(); } // 使用 Lambda 表达式作为参数传递 performAction(() -> { System.out.println("Performing action..."); }); ``` 3. Lambda 表达式与集合的结合: ```java List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); // 使用 Lambda 表达式遍历集合 names.forEach(name -> { System.out.println("Hello, " + name); }); ``` Lambda 表达式还支持方法引用、参数类型推断等特性,可以更进一步简化代码。它在函数式编程和并行处理等场景中具有很大的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值