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表达式已经成为了开发者必须要掌握的技能?的更多相关文章

  1. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  2. 释放Android的函数式能量(I):Kotlin语言的Lambda表达式

    原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...

  3. 委托,匿名函数和lambda表达式

    很早之前就接触到了委托,但是一直对他用的不是太多,主要是本人是菜鸟,能写的比较高级的代码确实不多,但是最近在看MSDN微软的类库的时候,发现了微软的类库好多都用到了委托,于是决定好好的研究研究,加深一 ...

  4. Lambda表达式入门

    Lambda表达式是Java 8的重要更新,也是一个被广大开发者期待已久的新特性,Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接 ...

  5. lambda表达式

    什么是Lambda表达式 lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出 ...

  6. 在Android中使用Java 8的lambda表达式

    作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...

  7. Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例

    本文由 ImportNew 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的ja ...

  8. 18、(番外)匿名方法+lambda表达式

    概念了解: 1.什么是匿名委托(匿名方法的简单介绍.为什么要用匿名方法) 2.匿名方法的[拉姆达表达式]方法定义 3.匿名方法的调用(匿名方法的参数传递.使用过程中需要注意什么) 什么是匿名方法? 匿 ...

  9. C#中的委托,匿名方法和Lambda表达式

    简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=.答案是6个Firs ...

随机推荐

  1. rust cargo 一些方便的三方cargo 子命令扩展

    内容来自cargo 的github wiki,记录下,方便使用 可选的列表 cargo-audit - Audit Cargo.lock for crates with security vulner ...

  2. pgloader 学习(八) pg 2 pg 简单demo

    pg 数据到pg 数据的迁移,同时支持名称的变更 环境准备 docker-compose文件 内容偏多可以忽略部分 version: "3" services: pgloader- ...

  3. 在触发器中使用{ITEM.LASTVALUE}时在首页问题栏信息显示不全

    在触发器中使用了系统宏变量,当条件满足时,如果这个宏代表的内容超过了20个字符,那么在首页信息就显示不全,会有一堆省略号 感谢https://blog.csdn.net/yu415907917/art ...

  4. Python题库系列分享一(17道)

    1.1  到Python官方网站下载并安装Python解释器环境.1.2  到Anaconda官方网站下载并安装最新的Anaconda3开发环境.1.3  Python程序的__name__的作用是什 ...

  5. BZOJ1034 ZJOJ2008 泡泡堂BNB

    BZOJ1034 ZJOJ2008 泡泡堂BNB Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表 队由n名选手组成,比赛 ...

  6. js constructor typeOf 区别

    constructor 属性返回对创建此对象的数组函数的引用. 例如:const obj = {a: 1}        console.log(obj.constructor)   // funct ...

  7. Markdown 打出上下标

    1. 打上标,下标 2<sup>10</sup> <!--下标--> 2.同时打上下标 $x^p_ {ij}$ <!--上标为p,下标为ij,{}是用来组合i ...

  8. 第10组 Alpha冲刺(5/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 学习调用中国天气网API,接近实现天气推送功能 对天气推送的形式进行讨论及重确 ...

  9. 【定制开发】经纪人报备软件 全民经纪人系统 房产中介微信小程序分享家恒房通

    信真科技2019年最先扛鼎之作 - 全民经纪人软件系统 1.含有最基础的经纪人注册.客户报备系统功能: 2.可支持定制开发,针对房企售楼部.中介门店: 3.与微信端绑定使用,方便快捷,快速分享: 4. ...

  10. PyTorch 实战:计算 Wasserstein 距离

    PyTorch 实战:计算 Wasserstein 距离 2019-09-23 18:42:56 This blog is copied from: https://mp.weixin.qq.com/ ...