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 ...
随机推荐
- jsp之大文件分段上传、断点续传
1,项目调研 因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面. http ...
- ArrayList 集合:库存管理
import java.util.ArrayList; import java.lang.Integer; import java.util.Scanner; import java.util.Ran ...
- [NOI2019]回家路线
[NOI2019]回家路线 题目大意: 有\(n\)个站点,\(m\)趟车,每趟车在\(p_i\)时从\(x_i\)出发,\(q_i\)时到达\(y_i\). 若小猫共乘坐了\(k\)班列车,依次乘坐 ...
- [PA2012]Dwa torty
[PA2012]Dwa torty 题目大意: 给定两个排列\(A_{1\sim n},B_{1\sim n}\),你需要将两个排列用最少的次数消除. 消除只能从头消除,一次消除可以从两个排列的头部取 ...
- [USACO12MAR]花盆 二分 单调队列
[USACO12MAR]花盆 二分 单调队列 存在一个长度为\(x\)的区间\([l,r]\),使得区间中最大值与最小值差至少为\(w\),求这个最小的\(x\) \(n\le 100000\),\( ...
- USACO 2009 Open 干草塔 Tower of Hay
USACO 2009 Open 干草塔 Tower of Hay Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草 包会从传送带上运来,共会出现N包 ...
- mysql 数据插入insert
mysql> select * from user; +------+----------+-----------+ | id | name | address | +------+------ ...
- 事务控制语言(TCL)
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行.如:转账. 原子性(Atomicity):一个事务要么都执行,要么都回滚(不可再分割) 一致性(Consistency) ...
- element ui,input框输入时enter健进行搜索
<el-form-item label="企业名称"> <el-input v-model="formSearch.kw" @keyup.en ...
- 《恶魔人crybaby》豆瓣短评爬取
作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...