Java内部类详解
Java:Lambda简化匿名内部类

Lambda概述、基本用法

  1. Lambda表达式是JDK 8开始后的一种新语法形式。
  2. 作用:简化函数式接口的匿名内部类的写法。

Lambda表达式的简化格式

(匿名内部类被重写方法的形参列表) -> {被重写方法的方法体代码。
}
注:-> 是语法形式,无实际含义

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

什么是函数式接口?

  • 必须是接口的匿名内部类,接口中只能有一个抽象方法

代码示例

public class LambdaDemo {public static void main(String[] args) {// 目标:学会使用Lambda的标准格式简化匿名内部类的代码形式// 注意:Lambda只能简化接口中只有一个抽象方法的匿名内部类形式(函数式接口)
//        Swimming s1 = new Swimming() {//            @Override
//            public void swim() {//                System.out.println("老师游泳贼溜~~~~~");
//            }
//        };//        Swimming s1 = () -> {//            System.out.println("老师游泳贼溜~~~~~");
//        };Swimming s1 = () -> System.out.println("老师游泳贼溜~~~~~");go(s1);System.out.println("---------------------");
//        go(new Swimming() {//            @Override
//            public void swim() {//                System.out.println("学生游泳很开心~~~");
//            }
//        });//        go(() ->{//                System.out.println("学生游泳很开心~~~");
//        });go(() -> System.out.println("学生游泳很开心~~~"));}public static void go(Swimming s){System.out.println("开始。。。");s.swim();System.out.println("结束。。。");}
}@FunctionalInterface // 一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
interface Swimming{void swim();
}

简化常见函数式接口

简化Comparator接口的匿名形式

Java Arrays类自定义排序

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

代码示例

public class LambdaDemo3 {public static void main(String[] args) {Integer[] ages1 = {34, 12, 42, 23};/**参数一:被排序的数组 必须是引用类型的元素参数二:匿名内部类对象,代表了一个比较器对象。*/
//        Arrays.sort(ages1, new Comparator<Integer>() {//            @Override
//            public int compare(Integer o1, Integer o2) {//                return o2 - o1; //  降序
//            }
//        });//        Arrays.sort(ages1, (Integer o1, Integer o2) -> {//                return o2 - o1; //  降序
//        });//        Arrays.sort(ages1, ( o1,  o2) -> {//            return o2 - o1; //  降序
//        });Arrays.sort(ages1, ( o1,  o2 ) ->  o2 - o1 );System.out.println(Arrays.toString(ages1));System.out.println("---------------------------");JFrame win = new JFrame("登录界面");JButton btn = new JButton("我是一个很大的按钮");
//        btn.addActionListener(new ActionListener() {//            @Override
//            public void actionPerformed(ActionEvent e) {//                System.out.println("有人点我,点我,点我!!");
//            }
//        });//        btn.addActionListener((ActionEvent e) -> {//                System.out.println("有人点我,点我,点我!!");
//        });//        btn.addActionListener(( e) -> {//            System.out.println("有人点我,点我,点我!!");
//        });//        btn.addActionListener( e -> {//            System.out.println("有人点我,点我,点我!!");
//        });btn.addActionListener( e -> System.out.println("有人点我,点我,点我!!") );win.add(btn);win.setSize(400, 300);win.setVisible(true);}
}

Lambda表达式的省略规则

  1. 参数类型可以省略不写;
  2. 如果只有一个参数,参数类型可以省略,同时()也可以省略;
  3. 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号;
  4. 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写;

上面的两个代码示例,均已简化到最简形式。

Java:Lambda简化匿名内部类相关推荐

  1. Java Lambda简化Comparator接口匿名内部类写法

    Lambda简化Comparator接口匿名内部类写法 //Lambda简化Comparator接口匿名内部类写法public static void main(String[] args) {Lis ...

  2. Lambda 表达式详解~简化匿名内部类

    本节将介绍如何使用Lambda表达式简化匿名内部类的书写,但Lambda表达式并不能取代所有的匿名内部类,只能用来取代函数接口(Functional Interface)的简写.先别在乎细节,看几个例 ...

  3. Java代码简化之朗母达表达式(Lambda Express)

    Java代码简化之朗母达表达式(Lambda Express) 本文目录: Lambda Express基本概念 Lambda Express的解析 1. Lambda Express基本概念 λ表达 ...

  4. java lambda使用_使用Java 8和Lambda简化ReadWriteLock

    java lambda使用 考虑到旧版Java代码,无论您在哪里看,带有lambda表达式的Java 8绝对可以提高质量和可读性. 今天,让我们看一下ReadWriteLock以及如何使它使用起来更简 ...

  5. java lambda循环_使用Java 8 Lambda简化嵌套循环

    java lambda循环 对于每个经常需要在Java 8(或更高版本)中使用多维数组的人来说,这只是一个快速技巧. 在这种情况下,您可能经常会以类似于以下代码的结尾: float[][] value ...

  6. java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程

    java lambda函数 " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的 ...

  7. Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)

    深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout ...

  8. java lam表达式_详细分析Java Lambda表达式

    在了解Lambda表达式之前我们先来区分一下面向对象的思想和函数式编程思想的区别 面向对象的思想: 做一件事情,找一个能解决这个事情的对象,调用他的方法来解决 函数时编程思想: 只要能获取到结果,谁去 ...

  9. Java——Lambda

    Java--Lambda 1.8的新特性: Lambda表达式 为了简化匿名内部类的 使用前提: 函数式接口: 必须要重写的抽象方法只有一个的接口 检测一个 接口是否为函数式接口: @Function ...

最新文章

  1. NLP中文面试学习资料:面向算法面试,理论代码俱全,登上GitHub趋势榜
  2. 一、ESP32环境搭建(基于vscode插件platformIO)
  3. 使用SAP Cloud Platform Leonardo机器学习提取图片的特征向量
  4. DynamoRIO工作原理
  5. Android自定义控件学习(三)----- 自定义视图组件
  6. 基于Python+Django的企业人事管理系统
  7. Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
  8. C++中 栈的简单封装
  9. 5复数与复变函数(五)
  10. 编程计算二叉树的深度
  11. [数字信号处理学习篇] FIR 滤波器基础(一)
  12. 2021.09.22数字货币小计
  13. maple软件安装教程
  14. win7 professional 英文版 改 中文
  15. matlab中转置矩阵的特征值,矩阵乘以矩阵的转置运算的解析
  16. 机器学习速成课程_关于获得一流客户推荐的速成课程
  17. JavaScript动态操作网页思维导图
  18. 电信IoT平台对接及使用
  19. x86架构和arm架构的cpu简图
  20. 新媒体背景下大学生的志愿服务参与研究(lunwen+任务书)

热门文章

  1. JAVA中parse和format用法
  2. JavaSe基础2022年12月05日学习内容
  3. android 蓝牙和wifi存在冲突
  4. Lecture1 听觉系统
  5. POI自动调整列宽错误
  6. tac_plus安装和配置
  7. 反向放大电路与同向放大电路的优缺点
  8. 鸿蒙os价格表,搭载鸿蒙 OS!华为智慧屏新品来袭:价格 3000+
  9. 小码哥-玩转【斗鱼直播APP】系列之首页导航栏设置
  10. 骨传导蓝牙耳机什么牌子好、骨传导蓝牙耳机排行榜