IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Lambda表达式 -> 正文阅读

[Java知识库]Lambda表达式

一、概念

1.lambda表达式:特殊的匿名内部类,语法更简洁

2.lambda表达式:允许把函数作为一个方法的参数(函数作为方法参数传递),将代码像数据一样传递

二、lambda的语法

由三部分组成:

(数据类型? 变量名,数据类型? 变量名)->{

??????? 方法体

}

(参数类型? 参数名称):参数列表

{代码体}:方法体

->:箭头。分割参数列表和方法体

三、初体验lambda表达式

public class Test01 {
    public static void main(String[] args) {
        Runnable runnable=()->{
            System.out.println("这是lambda表达式:"+Thread.currentThread().getName());
        };
        new Thread(runnable).start();//开启线程
    }
}

四、练习1

①练习无参无返回值的lambda

//练习无参返回值的Lambda
public class Test03 {
    public static void main(String[] args) {
        //1.自己创建一个User接口的实现类,并创建该类的对象
        User user=new UserImpl();//多态
        setShow(user);
        //2.使用匿名内部类
        User user1=new User() {
            @Override
            public void show() {
                System.out.println("这是user的匿名实现类");
            }
        };
        setShow(user1);
        System.out.println("======================================");
        //3.使用Lambda表达式
        User user2=()->{
            System.out.println("lambda表达式");
        };
        setShow(user2);
    }
    public static void setShow(User user){
        user.show();
    }
}
interface User{
    public void show();
}
class UserImpl implements User{

    @Override
    public void show() {
        System.out.println("这是User实现方法");
    }
}

②有参有返回值

public class Tset01 {
    public static void main(String[] args) {
        List<People> people = new ArrayList<>();
        people.add(new People("zhang",12));
        people.add(new People("liu",23));
        people.add(new People("san",13));
        //按照年龄排序
        Comparator<People> comparator=new Comparator<People>() {
            @Override
            public int compare(People o1, People o2) {
                return o1.getAge()-o2.getAge();
            }
        };
        Collections.sort(people,comparator);
        System.out.println(people);
        Comparator<People> comparator1=(o1,o2)->{
            return o1.getAge()-o2.getAge();
        };
        Collections.sort(people,comparator1);
        System.out.println(people);
    }

}
@Data
@NoArgsConstructor
@AllArgsConstructor
class People{
    private String name;
    private int age;
}

五、lombda表达式的使用前提

方法的参数或局部变量类型必须为接口才能使用Lambda

接口中有且仅有一个抽象方法(需要设置@FunctionalInterface)

六、缩写版

规则:

1.小括号内的参数类型可以省略

2.如果小括号内有且仅有一个参数,则小括号可以省略

3.如果大括号内有且仅有一个语句,可以同时省略大括号,return关键字及语句分号

public class Test01 {
    public static void main(String[] args) {
        User user=(String name,int age)->{
            return name+age;
        };
        geUer(user);
        User user1=(name,age)->name+"--"+age;//可以省略参数的类型,以及{}和return和分号
        geUer(user1);

        Student student=(name)->{
            System.out.println("wwww"+name);
        };
        getStudent(student);
        Student student1=name -> {
            System.out.println("jiao"+name);
        };
        getStudent(student1);
    }
    //1.方法的参数必须是一个接口类型
    //2.该接口有且仅有一个抽象方法
    public static void geUer(User user){
        String show = user.show("zhang", 12);
        System.out.println(show);
    }
    public static void getStudent(Student student){
        student.print("ddddd");
    }
}
@FunctionalInterface//防止别人在该接口中添加新的抽象方法,可以使用注解@FunctionalInterface
interface User{
    public String show(String name,int age);
    default void fun(){};//默认
}
interface Student{
    public void print(String name);
}

七、JDK1.8后新增的哪些:

JDK1.8以前:

public interface? 接口名{

??????? //静态常量

??????? //抽象方法

}

JDK1.8后:

public interface? 接口名{

??????? //静态常量

??????? //抽象方法

??????? //默认方法

??????? //静态方法

}

①默认方法:

格式:

修饰符? default? 返回类型? 方法名(){}

public interface Teacher {
    public static final String name="";
    public abstract void show();
    //如果接口新增一个方法,它的所有实现类必须重写该方法,不利于接口的扩展
    public abstract void print();
    default void app(){};
}
class User implements Teacher{

    @Override
    public void show() {
        System.out.println("user重写了");
    }

    @Override
    public void print() {

    }
}
class Student implements Teacher{

    @Override
    public void show() {
        System.out.println("student重写了");
    }

    @Override
    public void print() {

    }
}

②静态方法

格式:

修饰符? static 返回类型? 方法名(){}

静态方法的使用:

接口中的静态方法在实现类中是不能被重写的,调用的话只能通过接口类来实现:接口名.静态方法();

public interface User {
    public static final String a="";
    public abstract void app();
    public default void he(){//默认方法可以被重写。只能通过对象调用
        System.out.println("默认方法he");
    }
    public static void su(){//静态方法不能被重写,只可以通过接口名调用
        System.out.println("这是接口中的静态方法");
    }
}
class He implements User{

    @Override
    public void app() {
        System.out.println("app");
    }

    @Override
    public void he() {
        User.super.he();
    }
}

八、默认方法和静态方法的区别:

1.默认方法通过实例调用,静态方法通过接口名调用

2.默认方法可以被继承,实现类可以直接调用接口默认方法,也可以重写默认方法

3.静态方法不能继承,实现类不能重写接口的静态方法,只能使用接口名调用

九、函数式接口:

1.Consumer:消费型函数式接口,有参无返回值void? accept(T t)

2.Funtion:函数型函数式接口,有参有返回值R apply(T t)

3.Supper:供给型函数式接口,无参有返回值T get();

4.Predicate<T> 断言型函数式接口,有参有返回值? boolean? test(T t)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:37:37  更:2021-12-23 15:38:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:41:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码