2019独角兽企业重金招聘Python工程师标准>>>

为什么使用 Lambda 表达式

lLambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

Lambda 表达式

Lambda 表达式语法

Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:

左侧:指定了 Lambda 表达式需要的参数列表

右侧:指定了 Lambda 体,是抽象方法的实现逻辑,也即 Lambda 表达式要执行的功能。

package day26_1;import org.junit.Test;//写一个接口 B , 其中有一个抽象方法 String upper(String string);
//使用匿名内部类的方式实现这个接口, 方法中把参数里的字符串变成大写并返回
//使用lambda表达式方式实现这个接口, 方法中把参数里的字符串变成大写并返回
interface B {String upper(String string);
}// 最常规的做法
class B2 implements B {@Overridepublic String upper(String string) {return string.toUpperCase();}
}
/*
interface C {Integer max(Integer n1, Integer n2); // 取最大值
}
*/
interface C<X extends Comparable> { // X在这里就是泛型, 表示某种类型X max(X n1, X n2); // 取两个对象中的最大值
}
/** 写一个接口 C , 定义抽象方法 Integer max(Integer n1, Integer n2);*在测试方法中, 使用匿名内部类对象的方式完成这个接口的实现, 并调用方法, 打印输出*使用lambda表达式的方式来完成相同的功能 * */
public class LambdaExer {@Testpublic void test2() {C<Integer> c = new C<Integer>() {@Overridepublic Integer max(Integer n1, Integer n2) {return n1 > n2 ? n1 : n2;}};Integer max = c.max(10, 50);System.out.println(max);// lambda表达式 : 关注参数列表 -> 方法体 //C c2 = (Integer n1, Integer n2) -> {return n1 > n2 ? n1 : n2;};C<String> c2 = (n1, n2) -> n1.compareTo(n2) > 0 ? n1 : n2; // 通用性最好String max2 = c2.max("asfj", "ASFJ");System.out.println(max2);}@Testpublic void test1() {B b1 = new B2();String string1 = b1.upper("abcdefg");System.out.println(string1);// 匿名内部类B b2 = new B() {// 类体 @Overridepublic String upper(String string) {return string.toUpperCase();}};String string2 = b2.upper("abcdefg");System.out.println(string2);// lambda表达式, 只关注 抽象方法参数列表 -> 方法体B b3 = string -> string.toUpperCase();String string3 = b3.upper("abcdefg");System.out.println(string3);}
}package day26_1;import java.util.Collections;
import java.util.Comparator;
import java.util.List;import org.junit.Test;/*** lambda表达式 : 需要接口, 接口中必须只有一个抽象方法, 并且方法实现的方法体中只有一行语句.*   语法 : 参数列表 -> 方法体 * lambda表达式本质上就是一个匿名内部类的对象, 并且类型只能是接口类型* *   主要用于代替匿名内部类对象*/@FunctionalInterface
interface A {public String test(Integer num);//public Integer test2(String num);
}public class LambdaTest {@Testpublic void test3() {A a1 = new A() {@Overridepublic String test(Integer num) {return String.valueOf(num);}};// 参数类型可以省略, 并且, 如果参数列表中只有一个参数时, ()也省略A a2 = num -> String.valueOf(num);String string = a2.test(200);System.out.println(string);}@Testpublic void test2() {List<Student> list = StudentData.getList();// 比较器用于完成某两个学生对象的比较Comparator<Student> comparator = new Comparator<Student>() {// 类体相当于接口的实现子类@Overridepublic int compare(Student s1, Student s2) {return (int)(s1.getScore() - s2.getScore());}};Collections.sort(list,comparator);for (Student student : list) {System.out.println(student);}System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");// lambda表达式来做这个事情, 要求分数降序// 如果我们的方法体中, 只有一行语句, 可以省略{}, 如果有return 也可以省略//Comparator<Student> comparator2 = (Student s1, Student s2) -> {return (int)(s2.getScore() - s1.getScore());};// 因为左边的类型中已经有了泛型, 所有右面的表达式中的类型是可以推断的, 那么可以省略//Comparator<Student> comparator2 = (Student s1, Student s2) -> (int)(s2.getScore() - s1.getScore());Comparator<Student> comparator2 = (s1, s2) -> (int)(s2.getScore() - s1.getScore());Collections.sort(list, comparator2);for (Student student : list) {System.out.println(student);}}@Testpublic void test1() {Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + " : hello");}};new Thread(r1).start();// lambda表达式 : 省略父类或接口, 省略方法修饰符和返回值, 方法名, 只保留参数列表, 和 方法体// lambda表达式本质上就是一个匿名内部类的对象Runnable r2 = () -> System.out.println(Thread.currentThread().getName() + " : Hello2 ");new Thread(r2).start();}}

转载于:https://my.oschina.net/architectliuyuanyuan/blog/3048177

java 的lambda表达式相关推荐

  1. 10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里.在J ...

  2. Java 8 Lambda 表达式详解

    版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009186509 1. 引言 在 Java 8 以前,若我们想要把某些功能传递给某 ...

  3. Java 8 Lambda表达式-接口实现

    Java 8 Lambda表达式在只有一个方法的接口实现代码编写中,可以起到简化作用: (argument list) -> body 具体看Runnable接口的例子 public class ...

  4. 这是一个有趣的问题,Java 8 Lambda 表达式被编译成了什么?

    在了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么? 这是一个有趣的问题,涉及到JDK的具体的实现.本文将介绍OpenJDK对Lam ...

  5. Java 8 Lambda 表达式被编译成了什么?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取个gui 在了解了Java 8 Lambda的一些基本概念和应用后, 我们会 ...

  6. java 8 lambda表达式中的异常处理

    文章目录 简介 处理Unchecked Exception 处理checked Exception 总结 java 8 lambda表达式中的异常处理 简介 java 8中引入了lambda表达式,l ...

  7. 设计模式的Java 8 Lambda表达式–命令设计模式

    在本博客中,我将说明如何使用Java 8 Lambda表达式以函数式编程方式实现命令模式 . 命令模式的目的是将请求封装为对象,从而为具有不同请求,队列或日志请求的客户端参数化,并支持相应的操作. 命 ...

  8. Java 8 Lambda表达式的函数式编程– Monads

    什么是monad ?: monad是一种设计模式概念,用于大多数功能编程语言(如Lisp)或现代世界的Clojure或Scala中. (实际上,我会从scala复制一些内容.)现在,为什么它在Java ...

  9. 深入浅出 Java 8 Lambda 表达式

    摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...

  10. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

最新文章

  1. python对象编程例子-python(十二)面向对象编程、类
  2. from表单中 action的后面 内如果是 servlet的虚拟路径的话
  3. Error No matching provisioning profiles found
  4. Rtx 实时通知实现
  5. java开发工作找不到要放弃吗,年薪50W
  6. iOS UITableView 移除单元格选中时的高亮状态
  7. 页面内部DIV让点击外部DIV 事件不发生(阻止冒泡事件)
  8. 笨方法学python - 03
  9. C++ STL 一个简单的stack程序
  10. thinkphp [数据分页]
  11. samba访问其他服务器文件权限设置
  12. Twemproxy安装问题与不支持的操作明细
  13. Python爬虫爬取豆瓣图书的信息和封面,放入MySQL数据库中。
  14. java查询三级树(三级目录)
  15. error PRJ0003 : 生成“C:\WINDOWS\system32\cmd.exe”时出错
  16. conv、deconv、fractional-strided conv
  17. 智慧金融系统软件需求规格说明(3.20终版)
  18. 华泰单因子测试之换手率类因子
  19. TensorFlow Eager 教程
  20. 《余世维有效沟通》学习笔记

热门文章

  1. python时钟程序的设计总结_Python实现时钟显示效果思路详解
  2. pythonfopen_Python之文件读写详解
  3. matlab四节点矩形单元的应变,四节点矩形单元有限元解读.ppt
  4. 极大似然估计_极大似然估计、极大后验估计和贝叶斯估计
  5. Pure 天气(Android),Pure天气(hanjie.app.pureweather) - 8.5.5 - 应用 - 酷安
  6. 华为老机器可以升级鸿蒙,鸿蒙OS手机将至,华为手机用户提问,老款机器能升级吗?...
  7. 广西师范大学c语言期末试题,广西师范大学 据库原理(A卷).doc
  8. 【 C 】对指针表达式的个人总结与思考
  9. Uber开源TensorFlow框架工具箱Ludwig,无需编码即可进行深度学习开发
  10. 用7ch中断例程完成jmp near ptr s指令的功能,用bx向中断例程传送转移位移。