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

你可能感兴趣的文章
Oracle 启动阶段 OPEN
查看>>
Oracle 在Drop表时的Cascade Constraints
查看>>
Oracle 在Sqlplus 执行sql脚本文件。
查看>>
Oracle 如何处理CLOB字段
查看>>
oracle 学习
查看>>
oracle 定义双重循环例子
查看>>
ORACLE 客户端工具连接oracle 12504
查看>>
Oracle 客户端连接时报ORA-01019错误总结
查看>>
oracle 导出sql数据库表结构,使用sql developer 导出Oracle数据库中的表结构
查看>>
oracle 嵌套表 例子,Oracle之嵌套表(了解)
查看>>
Oracle 常用命令
查看>>
Oracle 常用的V$视图脚本(二)
查看>>
Oracle 并行原理与示例总结
查看>>
oracle 并集 时间_Oracle集合运算符 交集 并集 差集
查看>>
Oracle 序列sequence 开始于某个值(10)执行完nextval 发现查出的值比10还小的解释
查看>>
ORACLE 异常错误处理
查看>>
oracle 执行一条查询语句,把数据加载到页面或者前台发生的事情
查看>>
oracle 批量生成建同义词语句和付权语句
查看>>
oracle 抓包工具,shell 安装oracle和pfring(抓包) 及自动环境配置
查看>>
Oracle 拆分以逗号分隔的字符串为多行数据
查看>>