当前位置: 首页 > news >正文

java-Lambda表达式

Lambda表达式

  • lambda概述
  • Lambda实战-简化常见函数接口
  • Lambda表达式的省略规则

1.Lambda概述

  • Lambda表达式时JDK8开始后的一种语法形式。
  • 作用:简化匿名内部类的代码写法
  • Lambda表达式的简化格式
(匿名内部类被重写方法的形参列表)->{
    被重写方法的方法体代码.
}
注:->是语法形式,无实际含义

注意:

Lambda表达式只能简化函数式接口的匿名内部类的写法形式

什么是函数是接口?

  • 首先必须是接口,其次接口中有且仅有一个抽象方法的形式
  • 通常我们会在接口上加上一个@FunctionInterface注解,标记该接口必须是满足函数式接口。

总结:

  1. Lambda表达式的基本作用?
    • 简化函数式接口的匿名内部类的写法。
  2. Lambda表达式有什么使用前提?
    • 必须是接口的匿名内部类,接口中只能有一个抽象方法
  3. Lambda的好处/
    • Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁,更灵活的代码,作为一种更紧凑的代码风格,是Java语言表达能力得到了提升

使用实例:

public class LambdaDemo1 {
    public static void main(String[] args) {
//       complete(new run() {
//           @Override
//           public void go() {
//               System.out.println("乌龟跑的很慢!!!!!!!!!!!!!!");
//           }
//       });
        complete(() ->System.out.println("乌龟跑的慢!!!!!!!!!!!!!!"));
    }

    public static void complete(run r){
        r.go();
    }

}

@FunctionalInterface
interface run{
    public void go();
}

2.Lambda实战-简化常见的函数式接口

Lambda表达式简化comparator接口的匿名形式

import java.util.Arrays;

/**
 * Lambda表达式简化compare函数
 * */
public class LambdaDemo2 {
    public static void main(String[] args) {
        Integer[] arr = new Integer[]{213, 231421, 312312, 231321, 2314};
//        Arrays.sort(arr, new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o1-o2;
//            }
//        });

        //Lambda表达式简化
        Arrays.sort(arr, (Integer o1, Integer o2)-> {
                return o1-o2;});

        System.out.println(Arrays.toString(arr));
    }

}

Lambda表达式简化按钮监听器ActionListener的匿名内部类形式

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * Lambda表达式简化按钮监听器ActionListener的匿名内部类形式
 * */
public class LambdaDemo3 {
    public static void main(String[] args) {
        //创建窗口对象
        JFrame win = new JFrame("测试窗口");
        //创建桌布对象
        JPanel panel  = new JPanel();
        //将桌布添加到窗口上
        win.add(panel);

        //创建窗口大小与位置
        win.setSize(300, 400);
        win.setLocation(404,202);

        //创建按钮
        JButton btn = new JButton("点击");
        //为按钮添加事件监听器
//        btn.addActionListener(new ActionListener() {
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                System.out.println("你真的点了!!!!!!!!!!!!!!!!");
//            }
//        });

        //利用lambda表达式简化
        btn.addActionListener((ActionEvent e) ->{
               System.out.println("你真的点了!!!!!!!!!!!!!!!!");
         });

        //将按钮添加到桌布上
        panel.add(btn);


        win.setVisible(true);

    }
}

3.Lambda表达式的省略规则

Lambda表达式的省略写法(进一步在Lambda表达式的基础上继续简化)

  • 参数类型可以省略不写
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略
  • 如果Lambda表达式的方法体只有一行代码。可以省略大括号不写,同时要省略分号!
  • 如果Lambda表达式的方法体代码只有一行代码,可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略“;”不写
//        btn.addActionListener(new ActionListener() {
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                System.out.println("你真的点了!!!!!!!!!!!!!!!!");
//            }
//        });

        //利用lambda表达式简化
        btn.addActionListener((ActionEvent e) ->{
               System.out.println("你真的点了!!!!!!!!!!!!!!!!");
         });

		  btn.addActionListener( e->System.out.println("你真的点了!!!!!!!!!!!!!!!!"));


  Arrays.sort(arr, (Integer o1, Integer o2)-> {
                return o1-o2;});

        System.out.println(Arrays.toString(arr));
    }

简化
    Arrays.sort(arr, ( o1,  o2)->  o1-o2);

        System.out.println(Arrays.toString(arr));
    }

相关文章:

  • Robotics System Toolbox中的机器人运动(7)--RRT规划避障路径
  • 和一个海归的博士聊人生
  • 移动端布局介绍——css像素/物理像素/设备像素比
  • redis简介及八种数据类型
  • GAN Step By Step -- Step1 GAN介绍
  • vue纯前端结合css动画实现模拟导航效果
  • 【数据增强】90°、180°和270°翻转图片(*4)
  • 【Hadoop---07】HDFS 读 / 写 数据流程(面试重点)
  • 【笔记】C#得到真正的屏幕大小
  • SSH远程端口转发
  • 微信支付配置信息如何获取
  • nginx反向代理实例
  • webpack与vite对比
  • Linux中的权限机制
  • 字符串函数【C语言-3】
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • HTTP中GET与POST的区别 99%的错误认识
  • Js基础知识(四) - js运行原理与机制
  • Netty源码解析1-Buffer
  • Redis中的lru算法实现
  • 包装类对象
  • 工程优化暨babel升级小记
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 你不可错过的前端面试题(一)
  • 数据仓库的几种建模方法
  • 原生 js 实现移动端 Touch 滑动反弹
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #在 README.md 中生成项目目录结构
  • $.ajax()方法详解
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C++17) std算法之执行策略 execution
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (pytorch进阶之路)扩散概率模型
  • (办公)springboot配置aop处理请求.
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (算法)Travel Information Center
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net6 webapi log4net完整配置使用流程
  • .NetCore部署微服务(二)
  • .Net各种迷惑命名解释
  • @GetMapping和@RequestMapping的区别
  • @JsonFormat与@DateTimeFormat注解的使用
  • @RequestBody与@ModelAttribute
  • @SuppressWarnings注解
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [100天算法】-目标和(day 79)
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [ActionScript][AS3]小小笔记