lambda表达式已经成为了开发者必须要掌握的技能?
lambda表达式
lambda表达式是什么
引用百度百科
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
个人理解:简化了匿名函数的一种语法。
为什么要使用lambda表达式
使用lambda表达式能大量减少开发的代码量,并且能提高效率,java从JDK1.8开发支持lambda表达式。
例:
List<String> list = Arrays.asList("aa", "cc", "bb");
//不用lambda: Comparator比较器类定义排序规则 排序
list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.hashCode() - o2.hashCode();
}
});
//使用lambda(好处:缩减了大部分代码)
list.sort((o1, o2) -> o1.hashCode() - o2.hashCode());
System.out.println(list);
我在工作过程中遇到的一些使用lambda表达式
注:下面的例子Person类:name和age属性
//普通类型:定义了一个Person类(属性:姓名和年龄)
List<Person> persons = Arrays.asList(new Person("zhangsan", 20),
new Person("lisi", 18),
new Person("wangwu", 50)); //需求一:按照 人员的年龄进行排序
persons.sort((p1, p2) -> p1.getAge() - p2.getAge());
System.out.println(persons); //需求二:统计出 所有人员的年龄综合,平均值,最大值,最小值
System.out.println("年龄总和:" + persons.stream().mapToInt(p -> p.getAge()).sum());
System.out.println("年龄平均值:" + persons.stream().mapToInt(p -> p.getAge()).average());
System.out.println("年龄最大值:" + persons.stream().mapToInt(p -> p.getAge()).max());
System.out.println("年龄最小值:" + persons.stream().mapToInt(p -> p.getAge()).min()); //第一个元素
System.out.println("第一个:" + persons.stream().mapToInt(p -> p.getAge()).findFirst()); //需求n...
Stream方法
map方法: 能转换集合的类型
List<Person> persons = Arrays.asList(new Person("张三", 20),
new Person("李四", 18),
new Person("王五", 50));
//Person类转换成Interge类型
List<Integer> collect1 = persons.stream().map(p -> {
return p.getAge();
}).collect(Collectors.toList());
System.out.println(collect1);
//遍历集合,转换成 姓李的人员
List<PersonLi> collect2 = persons.stream().map(p -> {
PersonLi li = new PersonLi();
if(p.getName().indexOf("李") == 0){
li.setName(p.getName());
li.setAge(p.getAge());
return li;
}
return null;
}).filter(pf -> pf != null).collect(Collectors.toList());
System.out.println(collect2);
filter: 过滤
List<Person> persons = Arrays.asList(new Person("zhangsan", 20),
new Person("lisi", 18),
new Person("wangwu", 50));
//只需年龄小于30岁的
List<Person> collect = persons.stream().filter(p -> p.getAge() <= 30).collect(Collectors.toList());
System.out.println(collect);
Person person = persons.stream().filter(p -> p.getAge() <= 30).findAny().get();
System.out.println(person);
...还有redule方法,等等..(...暂时没用到),有读者用到可以分享一下自己工作中遇到的。
lambda表达式已经成为了开发者必须要掌握的技能?的更多相关文章
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- 释放Android的函数式能量(I):Kotlin语言的Lambda表达式
原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...
- 委托,匿名函数和lambda表达式
很早之前就接触到了委托,但是一直对他用的不是太多,主要是本人是菜鸟,能写的比较高级的代码确实不多,但是最近在看MSDN微软的类库的时候,发现了微软的类库好多都用到了委托,于是决定好好的研究研究,加深一 ...
- Lambda表达式入门
Lambda表达式是Java 8的重要更新,也是一个被广大开发者期待已久的新特性,Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接 ...
- lambda表达式
什么是Lambda表达式 lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出 ...
- 在Android中使用Java 8的lambda表达式
作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...
- Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例
本文由 ImportNew 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的ja ...
- 18、(番外)匿名方法+lambda表达式
概念了解: 1.什么是匿名委托(匿名方法的简单介绍.为什么要用匿名方法) 2.匿名方法的[拉姆达表达式]方法定义 3.匿名方法的调用(匿名方法的参数传递.使用过程中需要注意什么) 什么是匿名方法? 匿 ...
- C#中的委托,匿名方法和Lambda表达式
简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=.答案是6个Firs ...
随机推荐
- django-文件上传和下载--fastDFS安装和配置
5.1 安装fastdfs依赖包 一:下载安装FDFS依赖: libfastcommon 下载地址:https://codeload.github.com/happyfish100/libfastco ...
- LeetCode 721. Accounts Merge
原题链接在这里:https://leetcode.com/problems/accounts-merge/ 题目: Given a list accounts, each element accoun ...
- 集成omnibus-ctl 开发一个专业的软件包管理工具
前边有转发过来自chef 团队的一篇omnibus-ctl 介绍文章,以下尝试进行项目试用 就是简单的集成,没有多少复杂的操作 环境准备 ruby ruby 使用2.6.3 使用 rbenv 安装,可 ...
- 微信小程序音乐播放器组件
wxml <image bindtap="click" src="{{isPlay?'/images/':'/images/'}}"/> JS Pa ...
- Beta冲刺(1/5)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 初步任务分配 提交记录(全组共用) 接下来的计划 完善接口文档 还剩下哪些任务 学习软工的理论课 学习代码评估.测试 燃尽 ...
- QML学习(四)——<Text显示>
文本显示是界面开发必不可少的内容,在Qt Quick模块中提供了 Text 项目来进行文本的显示,其中可以使用 font 属性组对文本字体进行设置.这一篇我们来看看它们的具体使用. 使用字体 就像前面 ...
- MySQL的ROUND函数
ROUND(X) ROUND(X,D) 返回参数X, 其值接近于最近似的整数.在有两个参数的情况下,返回 X ,其值保留到小数点后D位,而第D位的保留方式为四舍五入.若要接保留X值小数点左边的D 位, ...
- es6学习4:async和await
async async函数返回一个 Promise 对象,可以使用then方法添加回调函数.当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句. funct ...
- 大数据 | 分布式文件系统HDFS 练习
本次作业来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 利用Shell命令与HDFS进行交互 以”./bin/dfs ...
- PokemonGo-LBS AR项目实战
<Pokemon GO>在2016年发布,立即成为一款现象级手游,时至今日也是最成功的AR游戏!<Pokemon GO>目前仍旧吸引全球范围内大批玩家入驻,而这也使得该款游戏创 ...