【Java】函数式编程思想-Lambda表达式

面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.
函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程
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对应的接口类型
  • 有且只有一个抽象方法的接口称作函数式接口(后面会详细介绍函数式接口)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google、MS和BAT教给我的面试真谛

大家好呀&#xff0c;我是「小鹿鹿鹿」&#xff0c;我又来啦&#xff5e;&#xff5e;趁大家还有依稀印象赶紧乘热打铁&#xff5e;&#xff5e;这次聊一聊关于面试的一些小想法&#xff0c;希望和大家交流交流&#xff5e;&#xff5e;虽然资历尚浅&#xff0c;但是也面过不少…

AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法

导读&#xff1a;词向量算法是自然语言处理领域的基础算法&#xff0c;在序列标注、问答系统和机器翻译等诸多任务中都发挥了重要作用。词向量算法最早由谷歌在2013年提出的word2vec&#xff0c;在接下来的几年里&#xff0c;该算法也经历不断的改进&#xff0c;但大多是仅适用…

甲子光年 | 为什么知识图谱终于火了?

本文转载自公众号甲子光年。如果知识是人类进步的阶梯&#xff0c;知识图谱就是AI进步的阶梯。作者&#xff5c;金丝猴编辑&#xff5c;甲小姐设计&#xff5c;孙佳栋微信&#xff5c;甲子光年 (ID:jazzyear)“知识图谱”相较于AI其他分支&#xff0c;似乎是最后一个热起来的赛…

Java多线程并发编程

一、线程池 1.1、什么是线程池 线程池是一种多线程的处理方式&#xff0c;利用已有线程对象继续服务新的任务&#xff08;按照一定的执行策略&#xff09;&#xff0c;而不是频繁地创建销毁线程对象&#xff0c;由此提高服务的吞吐能力&#xff0c;减少CPU的闲置时间。具体组成…

Step-by-step to Transformer:深入解析工作原理(以Pytorch机器翻译为例)

大家好&#xff0c;我是青青山螺应如是&#xff0c;大家可以叫我青青&#xff0c;工作之余是一名独立摄影师。喜欢美食、旅行、看展&#xff0c;偶尔整理下NLP学习笔记&#xff0c;不管技术文还是生活随感&#xff0c;都会分享本人摄影作品&#xff0c;希望文艺的技术青年能够喜…

【LeetCode】4月5日打卡-Day21-最大子序和问题

描述 给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 进阶: 如果你已…

知识图谱与智能问答基础理解

什么是知识图谱&#xff1f; 知识图谱本质上是语义网络&#xff0c;是一种基于图的数据结构&#xff0c;由节点(Point)和边(Edge)组成。在知识图谱里&#xff0c;每个节点表示现实世界中存在的“实体”&#xff0c;每条边为实体与实体之间的“关系”。知识图谱是关系的最有效的…

鲍捷 | 知识图谱从 0 级到 10 级简化版

本文转载自公众号&#xff1a;文因学堂。文因学以前写过几个进阶指南&#xff0c;可能都太难&#xff0c;不接地气。这里重新写一个更实事求是、更便于工程落地的版本0级&#xff1a;掌握正则表达式、SQL、JSON和一门支持if-then-else的高级语言 —— 是的&#xff0c;这些不是…

Java并发优化思路

一、并发优化 1.1、Java高并发包所采用的几个机制 &#xff08;1&#xff09;、CAS&#xff08;乐观操作&#xff09; jdk5以前采用synchronized&#xff0c;对共享区域进行同步操作&#xff0c;synchronized是重的操作&#xff0c;在高并发情况下&#xff0c;会引起线…

【Java】文件操作

1 File类的静态成员遍历 字段摘要static String pathSeparator与系统有关的路径分隔符&#xff0c;为了方便&#xff0c;它被表示为一个字符串。static char pathSeparatorChar与系统有关的路径分隔符。static String separator与系统有关的默认名称分隔符&#xff0c;为了方便…

他与她,一个两年前的故事

“ 有没有那个Ta&#xff0c;值得你一生去守护”1她能力出众&#xff0c;业务能力无人能出其左右&#xff1b;他资质平庸&#xff0c;扮演一个很不起眼的角色&#xff1b;她国色天香&#xff0c;是整个公司上上下下关注的焦点&#xff1b;他其貌不扬&#xff0c;甚至很多人根本…

科普 | 知识图谱相关的名词解释

知识图谱&#xff08;Knowledge Graph&#xff09;是谷歌于2012年提出。企业通常出于商业目的去设计新的概念和名词。但每一个概念的提出都有其历史渊源和本质内涵。下面列举了知识图谱相关的几个概念&#xff0c;并简要阐明了它们与知识图谱的关系和区别。Knowledge Base&…

系统性能衡量维度、指标

一、性能问题简介 应用性能是产品用户体验的基石&#xff0c;性能优化的终极目标是优化用户体验。当我们谈及性能&#xff0c;最直观能想到的一个词是“快”&#xff0c;Strangeloop在对众多的网站做性能分析之后得出了一个著名的3s定律“页面加载速度超过3s&#xff0c;57%的访…

搜索引擎核心技术与算法 —— 倒排索引初体验

今天开启一个新篇章——智能搜索与NLP。本篇章将由羸弱菜鸡小Q和大家一同学习与智能搜索相关的知识和技术&#xff0c;希望能和大家一同学习与进步&#xff0c;冲鸭&#xff01;&#xff01;这里首先区分两个概念&#xff1a;搜索和检索检索&#xff1a;数据库时代的概念&#…

【Java】第一阶段练习题

字符串 判断引用类型的地址而不是值当代码中出现字面量形式创建字符串对象时&#xff0c;JVM首先会对这个字面量进行检查。 如果字符串常量池中存在相同内容的字符串对象的引用&#xff0c;则将这个引用返回。否则新的字符串对象被创建&#xff0c;然后将这个引用放入字符串常量…

微服务设计原则和解决方案

一、微服务架构演进过程 近年来我们大家都体会到了互联网、移动互联带来的好处&#xff0c;作为IT从业者&#xff0c;在生活中时刻感受互联网好处的同时&#xff0c;在工作中可能感受的却是来自自互联网的一些压力&#xff0c;那就是我们传统企业的IT建设也是迫切需要转型&…

技术动态 | 知识可视化,连接和探究知识之间的联系!

本文转载自公众号&#xff1a;东湖大数据交易中心。大数据百人会线上沙龙 第八期3月1日晚八点&#xff0c;大数据百人会沙龙第八期主讲嘉宾——北京知珠传媒科技有限公司CEO郝庆一先生&#xff0c;分享他对可视化的理解&#xff0c;以及连接知识、探究知识之间的关系。1可视化…

潜在语义分析原理以及python实现代码!!!!

在Wiki上看到的LSA的详细介绍&#xff0c;感觉挺好的&#xff0c;遂翻译过来&#xff0c;有翻译不对之处还望指教。 原文地址&#xff1a;http://en.wikipedia.org/wiki/Latent_semantic_analysis 前言 浅层语义分析&#xff08;LSA&#xff09;是一种自然语言处理中用到的方法…

史上最可爱的关系抽取指南?从一条规则到十个开源项目

正文来自订阅号&#xff1a;AINLP正文作者&#xff1a;太子長琴&#xff08;NLP算法工程师&#xff09;小夕&#xff0c;我来给你出个题&#xff0c;看看你的反应如何&#xff1f;好呀好呀&#xff0c;你说~“梁启超有一个著名的儿子&#xff0c;叫梁思成;同时还有一个著名的学…