博客
关于我
Lambda表达式_hehe.employment.7.3
阅读量:390 次
发布时间:2019-03-05

本文共 2770 字,大约阅读时间需要 9 分钟。

7.6 函数式编程思想概述

函数式编程思想强调“做什么”而不是“怎么做”。与面向对象编程相比,函数式编程更注重结果的输出,而不是对象的形式。

  • 面向对象编程的核心:通过对象的方法完成任务,强调“怎么做”。
  • 函数式编程的核心:关注任务的结果,强调“做什么”。

7.7 冗余的Runnable代码

在Java中,创建Runnable接口的实现类并传递给Thread类的start方法虽然可行,但代码冗余。为了简化代码,可以使用匿名内部类或Lambda表达式。

示例代码:

public class Demo01Runnable {    public static void main(String[] args) {        // 创建Runnable接口的实现类对象        RunnableImpl run = new RunnableImpl();        // 创建Thread类对象,构造方法中传递Runnable接口的实现类        Thread t = new Thread(run);        // 调用start方法开启新线程        t.start();        // 使用匿名内部类实现Runnable        Runnable r = new Runnable() {            @Override            public void run() {                System.out.println(Thread.currentThread().getName() + " 新线程创建了");            }        };        new Thread(r).start();    }}

代码分析:

  • Thread类:需要接收Runnable接口作为参数,Runnable接口定义了抽象的run方法。
  • 匿名内部类:虽然繁琐,但避免了定义具体的Runnable实现类。
  • Lambda表达式:更简洁地实现Runnable接口,直接传递代码块。

7.8 编程思想转换

函数式编程的核心是将任务的执行结果传递给系统,而不是关注任务的具体实现方式。

  • “做什么”的本质:传递代码块,让系统执行。
  • “怎么做”的形式:虽然需要遵循面向对象的语法,但最终目的是实现任务。

生活举例:

从北京到上海可以选择高铁、飞机等不同方式,核心是到达终点,而不是选择什么方式。

Java 8的Lambda表达式为我们提供了更灵活的方式来实现函数式编程。

7.9 体验Lambda的更优写法

Lambda表达式可以显著简化代码,例如:

public class demoRunnable {    public static void main(String[] args) {        Runnable r = () -> {            System.out.println(Thread.currentThread().getName() + " 新线程创建了");        };        new Thread(r).start();    }}

7.10 匿名内部类的优缺点

  • 优点:避免定义具体类,简化代码。
  • 缺点:语法复杂,难以阅读和维护。

7.11 Lambda表达式的标准格式

Lambda表达式的格式为:

(参数列表) -> { 业务逻辑代码 }
  • 参数列表:括号内的参数类型和数量。
  • 箭头:传递参数到代码块。
  • 代码块:实现具体的业务逻辑。

7.12 Lambda表达式无参无返回值练习

创建一个Cook接口:

public interface Cook {    void makeFood();}

使用Lambda实现:

public class demoCook {    public static void main(String[] args) {        invokeCook(() -> {            System.out.println("吃饭了");        });    }    public static void invokeCook(Cook cook) {        cook.makeFood();    }}

7.13 Lambda表达式有参有返回值练习

对Person数组进行排序:

public class demoPerson {    public static void main(String[] args) {        Person[] arr = {            new Person("a", 3),            new Person("b", 1),            new Person("c", 1)        };        Arrays.sort(arr, (o1, o2) -> o1.getAge() - o2.getAge());        for (Person p : arr) {            System.out.println(p);        }    }}

7.14 Lambda表达式有参有返回值自定义接口练习

创建一个Calculator接口:

public interface Calculator {    int calc(int a, int b);}

使用Lambda实现:

public class demoCalculator {    public static void main(String[] args) {        invokeCalc(10, 30, (a, b) -> a + b);    }    public static void invokeCalc(int a, int b, Calculator c) {        int sum = c.calc(a, b);        System.out.println(sum);    }}

7.15 Lambda省略格式与使用前提

Lambda表达式可以省略以下内容:

  • 参数类型:省略括号内的类型描述。
  • 返回类型:省略方法返回值。
  • 代码块:省略{}内的代码和分号。

示例:

invokeCook(() -> System.out.println("吃饭了"));invokeCalc(120, 130, (a, b) -> a + b);

通过合理使用Lambda表达式,可以显著简化代码,同时提升代码的可读性和维护性。

转载地址:http://xgrwz.baihongyu.com/

你可能感兴趣的文章
nodejs中Express 路由统一设置缓存的小技巧
查看>>
nodejs中express的使用
查看>>
Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型
查看>>
Nodejs中的fs模块的使用
查看>>
NodeJS使用淘宝npm镜像站的各种姿势
查看>>
NodeJs入门知识
查看>>
nodejs包管理工具对比:npm、Yarn、cnpm、npx
查看>>
NodeJs单元测试之 API性能测试
查看>>
nodejs图片转换字节保存
查看>>
nodejs在Liunx上的部署生产方式-PM2
查看>>
nodejs基于art-template模板引擎生成
查看>>
nodejs字符与字节之间的转换
查看>>
NodeJs学习笔记001--npm换源
查看>>
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
vue3+Element-plus icon图标无法显示的问题(已解决)
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>