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. 数据分析 - Numpy

    简介 Numpy是高性能科学计算和数据分析的基础包.它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它.NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库 ...

  2. 关于AndroidStudio的apk打包遇到的问题记录

    12月份末尾,想来个总结,主要是得记一些重要的. 首先就得是AndroidStudi内的apk打包,就是弄当前项目app的安装包出来. 下面就说下具体步骤和注意问题. 首先 : 看到AndroidSt ...

  3. mov offset和lea的区别

    mov offset和lea的区别  原文地址:https://www.cnblogs.com/fanzi2009/archive/2011/11/29/2267725.html 全局变量取地址用mo ...

  4. 3D数据采集和重建

    3D数据采集和重建是从传感器数据生成三维或时空模型.一般而言,这些技术和理论适用于大多数或所有传感器类型,包括光学,声学,激光扫描,[1]雷达,热学,[2]地震.[3][4] 内容 ·        ...

  5. hotspot编译

    "AA=="1",==", /usr/bin/make -s VERBOSE="-s" LOG_LEVEL="warn" ...

  6. 【转】HTTP 协议的历史演变和设计思路

    一.HTTP/0.9 HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口. 最早版本是1991年发布的0.9 ...

  7. Amazon | OA 2019 | Optimal Utilization

    Given 2 lists a and b. Each element is a pair of integers where the first integer represents the uni ...

  8. vue-vuex的使用

    做后台项目的时候,有时候会需要用到状态管理,VUEX就能够很好的为我们解决好这个问题. 安装 VUEX npm install vuex --save 具体使用: 建立 src/store/index ...

  9. Sword 计算机内存对齐

    内存对齐理论 a.数据的对齐(alignment) 指数据的地址和由硬件条件决定的内存块大小之间的关系.一个变量的地址是它大小的倍数的时候,这就叫做自然对齐(naturally aligned). 例 ...

  10. Python - Django - form 组件内置的正则校验器

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...