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

你可能感兴趣的文章
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
nmap 使用方法详细介绍
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
nmap指纹识别要点以及又快又准之方法
查看>>
Nmap渗透测试指南之指纹识别与探测、伺机而动
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
nmon_x86_64_centos7工具如何使用
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.7 Parameters vs Hyperparameters
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
nnU-Net 终极指南
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
no available service ‘default‘ found, please make sure registry config corre seata
查看>>