博客
关于我
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/

你可能感兴趣的文章
PermissionError:Python 中的 [Errno 13]
查看>>
PermissionError:[Errno 13] 权限被拒绝:‘/manage.py‘
查看>>
Permutation
查看>>
return torch._C._broadcast_coalesced(tensors, devices, buffer_size)RuntimeError: NCCL Error 2:unhand
查看>>
perspective意思_2020年12月英语四级词汇讲解丨考点归纳:perspective
查看>>
PE启动盘和U启动盘(第三十六课)
查看>>
PE文件,节头有感IMAGE_SECTION_HEADER
查看>>
PE查找文件偏移地址
查看>>
PE知识复习之PE的导入表
查看>>
pfsense关闭nat
查看>>
PFX(Parallel Framework) and Traditional Multithreading
查看>>
PGOS:今天动手给电脑装青苹果Win7 X64位系统
查看>>
pgpool-II3.1 的内存泄漏(一)
查看>>
PgSQL · 特性分析 · PG主备流复制机制
查看>>
PGSQL主键序列
查看>>
PGSQL安装PostGIS扩展模块
查看>>
pg数据库中两个字段相除
查看>>
PhalApi:[1.23] 请求和响应:GET和POST两者皆可得及超越JSON格式返回
查看>>
Phalcon环境搭建与项目开发
查看>>
Phantom.js维护者退出,项目的未来成疑
查看>>