面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.
函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程
Java 8(JDK 1.8)中,加入了Lambda表达式的重量级新特性。

1 Runnable的实现举例

1.1 传统写法:

public class RunnableImpl implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"新线程创建了");}
}
public class Test {public static void main(String[] args) {RunnableImpl ri = new RunnableImpl();Thread t = new Thread(ri);t.start();}
}

1.2 简化写法-匿名内部类

public static void main(String[] args) {new Thread(new Runnable(){@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"新线程创建了");}}).start();}

1.3 Lambda去除冗余

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

2 Lambda表达式格式

  • 一些参数
  • 一个箭头
  • 一段代码
  • 格式:(参数列表)-> (重写方法的代码)

3 无参数无返回的Lambda

定义接口类

public interface Cook {public abstract void makeFood();
}

定义测试类

public class Test {public static void main(String[] args) {//匿名内部类invokeCook(new Cook(){@Overridepublic void makeFood() {System.out.println("吃饭了");}});//Lambda表达式invokeCook(()->{System.out.println("吃饭了");});}public static void invokeCook(Cook cook){cook.makeFood();}
}

4 有参数和返回值的Lambda

4.1 传统写法

public class Test {public static void main(String[] args) {Person[] arr = {new Person("张三",10),new Person("李四",20),new Person("王五",30)};//按照年龄升序 前-后Arrays.sort(arr, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {return o1.getAge() - o2.getAge();}});for (Person person : arr) {System.out.println(person);}}
}

4.2 Lambda写法

public class Test {public static void main(String[] args) {Person[] arr = {new Person("张三",10),new Person("李四",20),new Person("王五",30)};//按照年龄升序 前-后Arrays.sort(arr, (Person o1, Person o2)-> {return o1.getAge() - o2.getAge();});for (Person person : arr) {System.out.println(person);}}
}

4.3 自定义接口练习

public interface Calculator {public abstract int cal(int num1, int num2);
}
public class Test {public static void main(String[] args) {invokeCal(10,20,(int a, int b)->{return a+b;});//30invokeCal(40,20,(int a, int b)->{return a-b;});//20invokeCal(40,20,(int a, int b)->{return a*b;});//800}public static void invokeCal(int a, int b, Calculator c){int sum = c.cal(a,b);System.out.println(sum);}
}

5 Lambda的省略格式和使用前提

  • 可以省略参数列表括号中的参数类型
  • 如果参数只有一个类型和()都可以省略
  • 如果{}中的代码只有一行都可以省略{}、return、分号 (三者要一起省略)
public class Test {public static void main(String[] args) {//Lambda表达式invokeCook(()->System.out.println("吃饭了"));}public static void invokeCook(Cook cook){cook.makeFood();}
}
public class Test {public static void main(String[] args) {Person[] arr = {new Person("张三",10),new Person("李四",20),new Person("王五",30)};//按照年龄升序 前-后Arrays.sort(arr, (o1, o2)-> return o1.getAge() - o2.getAge());}
}

使用前提

  • 必须具有接口,且接口中只有一个抽象方法。【Runnable、Comparator和自定义类型都只有一个抽象方法】
  • 方法的参数或局部变量类型必须式Lambda对应的接口类型
  • 有且只有一个抽象方法的接口称作函数式接口(后面会详细介绍函数式接口)

【Java】函数式编程思想-Lambda表达式相关推荐

  1. Java 函数式编程和 lambda 表达式

    为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...

  2. Java函数式编程和Lambda表达式

    文章目录 什么是函数式编程 Lambda表达式 @FunctionalInterface函数式接口 Lambda表达式的格式 方法引用 什么是函数式编程 相信大家都使用过面向对象的编程语言,面向对象编 ...

  3. Java函数式编程(Lambda表达式、Stream流用法)

    函数式编程 1.函数式编程思想 1.1.1 概念 ​ 面向对象思想需要关注用什么对象完成什么事情.而函数式编程思想就类似于我们数学中的函数.它主要关注的是对数据进行了什么操作. 1.1.2 优点 代码 ...

  4. 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

    今天,用通俗易懂的大白话来彻底搞明白Java里的函数式编程和Lambda表达式 为什么引入函数式编程,lambda表达式? 大家都知道,JDK1.8引入了函数式编程,lambda表达式. 那有没有想过 ...

  5. 函数式编程与Lambda表达式

    函数式编程与Lambda表达式 1 函数式编程的优势 1.1 函数式编程思想 在数学中,函数就是有输入量.输出量的一套计算方案,也就是"拿什么东西做什 么事情".编程中的函数,也有 ...

  6. 函数式编程(Lambda表达式、Optional、Stream流)

    函数式编程(Lambda表达式.Optional.Stream流) 文章目录 函数式编程(Lambda表达式.Optional.Stream流) 一.概述 1. 为什么要学习函数式编程? 2. 函数式 ...

  7. java函数式编程_Java 函数式编程和 lambda 表达式详解

    作者:DemonsI my.oschina.net/demons99/blog/2223079 为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要 ...

  8. Java 8th 函数式编程:lambda 表达式

    Lambda 表达式是 java 8th 给我们带来的几个重量级新特性之一,借用 lambda 表达式可以让我们的程序设计更加简洁.最近新的项目摒弃了 6th 版本,全面基于 8th 进行开发,本文将 ...

  9. java convert函数_Java 函数式编程和Lambda表达式

    1.Java 8最重要的新特性 Lambda表达式.接口改进(默认方法)和批数据处理. 2.函数式编程 本质上来说,编程关注两个维度:数据和数据上的操作. 面向对象的编程泛型强调让操作围绕数据,这样可 ...

最新文章

  1. PL/SQL -- 动态SQL调用包中函数或过程
  2. JSP实现停车场收费管理系统
  3. 【Go】panic: reflect: call of reflect.Value.FieldByName on ptr Value
  4. 封装一个邮件发送工具类,一个字,巴适
  5. 使用即时通讯(IM)SDK心得体验
  6. [转]ISO镜像工具PowerISO和UltraISO制作ISO光盘镜像教程
  7. ffmpeg教程 php推流,详解NODEJS基于FFMPEG视频推流测试
  8. 五 常见的计算机故障有哪些,六大常见的电脑故障原因
  9. 小程序中自定义组件、父子传值的具体步骤(秒懂)
  10. 春招/秋招面试前必看一文
  11. ChatGPT让我变成了“超人”-如何提升团队30%效能质量提高100%的阶段性总结报告
  12. 《设计模式之禅》-策略模式
  13. windows onlyoffice教程
  14. NOIP复习篇———动态规划
  15. php邮箱必填,ZBlogPHP-1.5 以上版本修改实现用户评论时必填邮箱的功能
  16. RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播流媒体服务器EasyNVR证书配置页面按钮无法正常打开和关闭的问题解析
  17. CSS实现水平局中、垂直局中详解
  18. Origin 2021汉化的方法
  19. web自动化测试入门篇04——selenium+python基础方法封装
  20. zblog完美转换php,数据库字段替换法完美实现Pjblog3转Zblog

热门文章

  1. 计算最后一个单词的字符串长度
  2. ​我敢说,这是最全的常用设计模式汇总
  3. 中断下半部机制-softirq-Tasklet-工作队列
  4. 事务嵌套问题_注意Spring事务这一点,避免出现大事务
  5. 每日一题(25)—— 自加++
  6. VS2019调试查看变量_你很可能需要知道这个调试小技巧
  7. 【Pytorch神经网络实战案例】13 构建变分自编码神经网络模型生成Fashon-MNST模拟数据
  8. matlab画线不同颜色_怎样画线框图才有意义
  9. CSS——设置第一个以外的元素样式:not(:first-child),设置最后一个除外的元素样式:not(:last-child)
  10. 数据库和ORMS:使用Tortoise ORM与数据库通信