JAVA8之lambda表达式
lambda表达式是java8开始支持的一个特性,方便好用,使用lambda表达式进行编程可以明显提升开发效率,并且在执行效率上也有一定的优化。下面回顾一下lambda表达式的两部分常见用途。
一、针对函数式接口编程,匿名内部类的实现。
首先用个人语言来描述下函数式编程,就是接口中只含有一个接口方法,然后生成这个接口的实现类时只需要实现这一个接口方案就能构成一个实现类,此时就可以使用lambda表达式来实现这种匿名内部类,他是以一种函数的形式来表达的,前面为一个函数的输入,然后yige “->”后面接这个函数的方法体,下面以两个常见的例子来看,最常见的便是创建线程时u,这时我们最常使用匿名内部类的时候,在没有lambda表达式时,我们是这样实现的
Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("run ... ");} };Thread thread = new Thread(runnable); thread.start();
runnable这个接口中只有一个未实现的方法run,所以我们可以使用lambda表达式来实现它,我们可以将上述代码简化为
new Thread(()->System.out.println("run ... ")).start();
()是run方法没有参数,所以以()表示,->以后为run方法的实现,这个就很想函数的形式,所以称为函数式编程
还有个我们比较常见的例子就是比较器,在没使用lambda表达式时是如下所示
List<String> list = Arrays.asList("aa", "abc", "abcdf", "v","java"); Collections.sort(list, new Comparator<String>(){// 接口名 @Overridepublic int compare(String s1, String s2){// 方法名if(s1 == null)return -1;if(s2 == null)return 1;return s1.length()-s2.length();} });
使用了lambda表达式时这样
List<String> list = Arrays.asList("aa", "abc", "abcdf", "v","java"); Collections.sort(list, (s1, s2) ->{// 省略参数表的类型 if(s1 == null) return -1; if(s2 == null) return 1; return s1.length()-s2.length(); });
Comparator接口只有compare一个接口方法,其中(s1, s2)是compare方法传入的参数,->以后为compare方法的实现。(s1,s2)没有参数类型,是因为java编译器可以通过后面参数的使用位置推断出参数的类型,故可以省略,当然,我们也可以不省略,写成(String s1,String s2)二,流式操作,批量处理集合在对集合的操作上使用lambda表达式其一是简化代码,不用写太多无用且必须的语句,其二,sream的流式操作默认使用了多线程的形式,可以在在待处理集合数据量大的情况下显著提升效率。sream分为中间操作和结束操作两部分其中详情见下表
操作类型 | 接口方法 |
---|---|
中间操作 |
concat() distinct() filter() flatMap() limit() map() peek() skip() sorted() parallel() sequential() unordered() |
结束操作 |
allMatch() anyMatch() collect() count() findAny() findFirst() forEach() forEachOrdered() max() min() noneMatch() reduce() toArray() |
其中中间方法是对集合进行操作,而结束操作是将处理完类型的sream的对象转换为结果的集合或者数值、字符串,流式操作的含义就是进行完一个处理后还可以继续以流的方式继续处理,比如先去重,然后排序。下面介绍下常用的几个方法distinct,去重
Stream<String> stream= Stream.of("aa", "abc", "abcdf", "v","java"); stream.distinct() .forEach(str -> System.out.println(str));
sort,排序
Stream<String> stream= Stream.of("aa", "abc", "abcdf", "v","java"); stream.sorted((str1, str2) -> str1.length()-str2.length()) .forEach(str -> System.out.println(str));
转载于:https://www.cnblogs.com/Lliuyao/p/9980718.html
JAVA8之lambda表达式相关推荐
- Java8中Lambda表达式的10个例子
Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 Java代码 //Before Java 8: new Thread(new Runnable() ...
- Java8之lambda表达式略解
一.什么是lambda表达式? Lambda 表达式,其实就是匿名函数.而函数其实就是功能(function),匿名函数,就是匿名的功能代码了,我们可以把 Lambda 表达式理解为是一段可以传递的代 ...
- Java8 之 lambda 表达式、方法引用、函数式接口、默认方式、静态方法
今天我来聊聊 Java8 的一些新的特性,确实 Java8 的新特性的出现,给开发者带来了非常大的便利,可能刚刚开始的时候会有点不习惯的这种写法,但是,当你真正的熟悉了之后,你一定会爱上这些新的特性的 ...
- 提高Java表达能力!不落伍一起掌握Java8中Lambda表达式、函数式接口及方法构造器数组引用
文章目录 函数式接口概述 函数式接口示例 内置函数式接口 Lambda简述 Lambda语法 方法引用 构造器引用 数组引用 函数式接口概述 只包含一个抽象方法的接口,称为函数式接口. 可以通过 La ...
- 浅谈Java8之lambda表达式
1.首先我们看一个通常喜欢写的一个示例 new Thread(new Runnable() {@Overridepublic void run() {System.out.println(" ...
- 紧随时代的步伐--Java8之Lambda表达式的使用
1.前言 在计算机行业,每天都会有新的技术诞生,每天都会有上百种的技术更新升级.追随时代的步伐,终生学习,才能不被社会的浪潮淘汰. 2.关于Lambda表达式 Lambda表达式是Java8新特性之一 ...
- java8中 lambda表达式,stream操作
什么是lambda表达式 概念:Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda ab ...
- Java8之lambda表达式的总结
什么是lambda表达式? Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格, ...
- Java8:Lambda表达式增强版Comparator和排序
1.概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式--特别是怎样使用它来编写Comparator和对集合(Collection)进行排 ...
最新文章
- hadoop跑第一个实例过程
- mysql -u root -p 解释
- 80后:从“A”到“Z”的26条生存法则 (转)
- Atitit 业务领域体系分类 目录 1. 按照互联网企业类型以及只是体系类的分类	2 2. 电子商务	2 3. **通信类社交 Im类 em	2 4. **信息搜索类爬虫	2 4.1. 媒体
- (转载)数据库的三范式:我见过讲的最通俗易懂的三范式!!!
- openvino系列 16. OpenVINO 手写字体识别 OCR
- 利用PS制作GIF动图
- Android 图片资源大瘦身
- DIY智能家居语音助理——语音智控万物
- 卡塞格林光学系统_卡塞格林红外光学系统装调技术研究
- DockerSwarm部署服务一直处于preparing
- 《面朝大海,春暖花开》——海子
- 98、网管型和非网管型交换机有什么区别
- scrollTo()方法
- 使用OSGeo4W安装配置QGIS
- 2017年即将过半 免费OA系统行业OA厂商大转变
- 短视频营销是什么?为什么现在这么火?
- 软件测试中的“电商项目”讲解
- 1. 服务器端渲染(SSR)简介
- 三大地图,通过url获取网页定位嵌套在iframe中展示