lambda表达式

  • 函数式接口:只有一个方法的接口,比如Runnable和Comparator

先看几个 lambda 表达式的例子进行理解

(int x,int y) -> x + y  //接收x和y两个整形参数,并返回他们的和
() -> 66               //不接收任何参数直接返回66
(String name) -> {System.out.println(name);}  //接收一个字符串然后打印出来
(View view) -> {view.setText("123");}  //接受一个view对象并调用setText方法
复制代码
  • lambda 表达式本质上是一个 由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能
  • 是java se 8 中的一个重要新特性。lambda表达式允许你通过表达式来代替接口功能
  • 基本语法:

(parameters) -> expression 或

(parameters) ->{ statements; }

使用lambda 表达式遍历集合

String[] stars = {"james", "kobe", "paul", "Anthony","rose", "love","jr", "Jordan "};
List<String> starList = Arrays.asList(stars);
starList.forEach((star) -> System.out.println(star));
//或者
starList.forEach(System.out::println);
复制代码

在使用匿名内部类的时候

  • 比如创建线程,不适用lambda表达式
new Thread(new Runnable() {@Overridepublic void run() {System.out.println(1);}
}).start();
复制代码
  • 使用lambda 表达式
new Thread(()-> System.out.println(1)).start();
复制代码

集合排序

  • 不使用lambda 表达式
        String[] stars = {"james", "kobe", "paul", "Anthony","rose", "love","jr", "Jordan "};Arrays.sort(stars, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}});
复制代码
  • 使用lambda 表达式
Arrays.sort(stars,(String s1,String s2) -> (s1.compareTo(s2)));
复制代码

stream和lamda的结合使用

  • 什么是stream
  • 若想要将一个集合中的某个属性提取出来,比如下面这样
        List<Player>list = new ArrayList<>();list.add(new Player("kobe","lakers",31,30000));list.add(new Player("james","lakers",34,33000));list.add(new Player("paul","rocket",34,20000));list.add(new Player("hardon","rocket",31,20000));List<String> names = new ArrayList<>();for (Player player : list) {names.add(player.getName());}for (String name : names) {System.out.println(name);}复制代码
  • 若使用lambda 表达式
List<String> names = list.stream().map(Player::getName).collect(Collectors.toList());
names.forEach(System.out::println);
复制代码
  • 当然我们还可以进行更复杂一点的操作,给每个球员的分数加1000
list.forEach( s -> s.setScore(s.getScore() + 1000));
list.stream().map(Player::getScore).collect(Collectors.toList()).forEach(System.out::println);复制代码
  • 也可以过滤出分数大于30000 年龄小于32 的球员
list.stream().filter((p) -> (p.getScore() > 30000)).filter((p) -> (p.getAge() < 32)).collect(Collectors.toList()).forEach(System.out::println);
复制代码
  • 根据球员的分数来排序
list.stream().sorted((p1,p2) -> (p1.getScore()-p2.getScore())).collect(Collectors.toList()).forEach(System.out::println);
复制代码

Lambda 表达式的应用相关推荐

  1. Lambda 表达式基础理论与示例

    Lambda 表达式基础理论与示例 Lambda 表达式,也可称为闭包,推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lam ...

  2. lambda表达式树

    一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...

  3. java 8 lambda reduce_JDK8新特性Lambda表达式体验

    "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstra ...

  4. java saf_Java 8 Lambda表达式探险

    为什么? 我们为什么需要Lambda表达式 主要有三个原因: > 更加紧凑的代码 比如Java中现有的匿名内部类以及监听器(listeners)和事件处理器(handlers)都显得很冗长 &g ...

  5. lamda表达式python_Python--13 lambda表达式

    python 允许使用lambda表达式来创建匿名函数 lambda表达式 >>>def ds(x): ... return 2 * x +1 ... >>> ds ...

  6. C++11:Lambda表达式(匿名函数)理解

    C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式 实质上是创建一个匿名函数/对象.即你可以理解为(Lambda 表达式实际上是一个函数,只是它没 ...

  7. java8 lambda 表达式详解

    lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例 可以将 lambda ...

  8. Java8中Lambda表达式的10个例子

    Java8中Lambda表达式的10个例子  例1 用Lambda表达式实现Runnable接口 Java代码   //Before Java 8: new Thread(new Runnable() ...

  9. 【读书笔记】Lambda表达式

    Lambda表达式,是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型. Lambda表达式, 都是用"=>"运算符. 读作"goes t ...

  10. 【C++】lambda 表达式

    1.lambda 表达式 1.1 lambda 特点 lambda表示一个可调用单元,可视为内联函数 范式 : 具有一个返回类型,一个参数列表,一个函数体 [captrue list](paramet ...

最新文章

  1. cmder里ls、pwd、自定义的alias等一系列命令都无法使用
  2. swust oj 962
  3. Leetcode4-寻找两个正序数组的中位数原理及代码实现
  4. java读取属性文件的方法_java读取属性文件的方法
  5. Android关于Handler发送消息里面的arg1和arg2以及obj和what的用法
  6. 移动端判断手机横竖屏状态
  7. 前端- 不用React 而使用 Vue,这么做对吗?
  8. 中国为什么不能成为国际数据中心枢纽
  9. 基于Java的贪吃蛇游戏设计(含免费可用源代码)
  10. php文章详情页排版,WordPress自定义文章详情页模板
  11. 计算机大型机小型机的缩写,计算机可被划分为3个基本类型大型机,小型机与微型机。.doc...
  12. UVA - 10106 Product
  13. 让Thread#stop方法无法终止你的线程
  14. 小熊派-FreeRTOS-串口打印
  15. 用python绘制叠加等边三角形_使用turtle库绘制叠加等边三角形
  16. 基于Node.js的3DTiles三维倾斜摄影模型爬虫
  17. jquery实现新闻消息滚动
  18. 云服务器上部署仿牛客网项目
  19. 关于PDU电源插座,你了解多少?
  20. 学计算机需要什么基础?

热门文章

  1. Redis 数据类型介绍
  2. 浅谈Java的Fork/Join并发框架
  3. Jvm原理剖析与调优之内存结构
  4. java虚拟机启动参数分类详解
  5. Java虚拟机jvm 调优总结
  6. 为什么Java 8中不再需要StringBuilder拼接字符串
  7. Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)
  8. eclipse导出jar包
  9. python 字符串格式化,使用f前缀
  10. java左移、右移、无符号右移