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. 35 Top Open Source Companies

    https://www.datamation.com/open-source/35-top-open-source-companies-1.html If you think of open sour ...

  2. [USACO 09FEB]Bullcow

    Description 题库链接 有 \(n\) 头牛,每头牛可以为 \(\text{A}\) 牛也可以为 \(\text{B}\) 牛.现在给这些牛排队,要求相邻两头 \(\text{A}\) 牛之 ...

  3. RedisTemplate在项目中的应用

    如下主要通去年无聊做的 "涂涂影院后台管理系统" 一个 demo,看 RedisTemplate 的使用. 体验地址:http://video.71xun.com:8080  账户 ...

  4. gitbase cube.js schema 文件项目

    cube.js 进行数据分析,需要我们编写schema 文件,但是因为gitbase 的原因没发进行自动生成,而且还有些问题 所以做了一些简单的修改 注意直接使用cube-cli 0.9.0 可以自动 ...

  5. PowerDesigner 创建表的时候 没有自增长Id的设置项

    今天早上同事创建表的时候,在那个界面没有自增长Id的选项,当时我也纳闷,软件肯定都是一样的,设置的步骤都一样(有些配置好的 我就没改过 然后就忘了还改过些什么步骤了),结果还是没有那个选项 百度了一下 ...

  6. [PA2012]Dwa torty

    [PA2012]Dwa torty 题目大意: 给定两个排列\(A_{1\sim n},B_{1\sim n}\),你需要将两个排列用最少的次数消除. 消除只能从头消除,一次消除可以从两个排列的头部取 ...

  7. CDH CM版本 6.0.1 升级到 CM 6.2.0 当前最新版本(CentOS 7.x)

    CDH 的 6.0.1 是一个尴尬的版本,那时候 cloudera 还没有将 spark 更新到 2.4 还使用的是 spark 2.2版本. 但后来我们发现 2.3 | 2.4 更新了非常多的 fe ...

  8. 计蒜客——Reversion Count

    Reversion Count 解析:题目数字的长度最大为 99,因此使用字符串处理,那么必然这些数存在某些规律.对于数 a (XYZW) 和数 b (WZYX),原式 = (1000X + 100Y ...

  9. fluent运行过程中转换边界

    我们以一个简单的VOF算例来说明,算例模型如下: 算例中空气为主相,水为次相.开始时刻,inlet_one设置为速度入口边界,速度为1m/s,且水的体积分数为100%,inlet_two设置为速度入口 ...

  10. ArrayList: java之ArrayList详细介绍(转)

    1  ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List ...