>看例子

对于员工Employee(成员:name、age、salary)

public class Testlambda {// 需求:获取当前员工年龄大于35 的员工// 需求:获取点钱员工工资大于5000的员工// 需求;......// 下面这段会产生大量的冗余代码,怎么办?List<Employee> employees = Arrays.asList(new Employee("张三", 18, 9999.99), new Employee("李四", 50, 6999.99),new Employee("王五", 35, 9999.99), new Employee("赵六", 22, 5999.99), new Employee("田七", 26, 3999.99));public List<Employee> filterEmployee(List<Employee> list) {List<Employee> emps = new ArrayList<Employee>();for (Employee emp : list) {if (emp.getAge() > 35) {emps.add(emp);}}return emps;}// 优化方式一:设计模式(策略模式)public List<Employee> fileterEmployee(List<Employee> list, MyPredicate<Employee> mp) {List<Employee> emps = new ArrayList<Employee>();for (Employee emp : list) {if (mp.test(emp)) {emps.add(emp);}}return emps;}@Testpublic void test1() {List<Employee> list = fileterEmployee(employees, new FilterEmployeeByAge());for (Employee employee : list) {System.out.println(employee);}System.out.println("-------------------");List<Employee> list2 = fileterEmployee(employees, new FilterEmployeeBySalary());for (Employee employee : list2) {System.out.println(employee);}}// 优化方式二:匿名内部类@Testpublic void test2() {List<Employee> list = fileterEmployee(employees, new MyPredicate<Employee>() {@Overridepublic boolean test(Employee t) {return t.getAge() > 35;}});for (Employee employee : list) {System.out.println(employee);}}// 优化方式三:lambda表达式@Testpublic void test3() {List<Employee> list = fileterEmployee(employees, (e) -> e.getSalary() >= 5000);list.forEach(System.out::println);}// 优化方式四:Stream API(不使用策略模式)@Testpublic void test4() {employees.stream().filter((e) -> e.getSalary() >= 5000).limit(2).forEach(System.out::println);System.out.println("-------------------");employees.stream().map(Employee::getName).forEach(System.out::println);}}

 >策略模式用例

public interface MyPredicate<T> {public boolean test(T t);}
public class FilterEmployeeBySalary implements MyPredicate<Employee> {@Overridepublic boolean test(Employee t) {return t.getSalary() >= 5000;}}
public class FilterEmployeeByAge implements MyPredicate<Employee> {@Overridepublic boolean test(Employee t) {return t.getAge() > 35;}}

Java 8 为什么要使用Lambda表达式相关推荐

  1. 【Java 8 in Action】Lambda表达式

    文章目录 Lambda表达式 Lambda表达式的介绍 Lambda表达式的语法 Method References Default methods Functional Interface 浅析La ...

  2. 不少Java程序员都觉得Lambda表达式很鸡肋,它到底有何用呢?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://urlify.cn/B3uiI3 # 什么是 ...

  3. Java 8 vs. Scala之Lambda表达式

    [编者的话]2014年3月份众人期待已久的Java 8发布了,新版本从语言.编译器.类库和工具等方面对Java进行了诸多改进与提升,一时间风光无限:而JVM体系的另一门语言Scala则因为融合了函数式 ...

  4. java lambda表达式_恕我直言你可能真的不会java第1篇:lambda表达式会用了么?

    本文配套教学视频:B站观看地址 在本号之前写过的一些文章中,笔者使用了lambda表达式语法,一些读者反映说代码看不懂.本以为java 13都已经出了,java 8中最重要特性lambda表达式大家应 ...

  5. Java 8th 函数式编程:lambda 表达式

    Lambda 表达式是 java 8th 给我们带来的几个重量级新特性之一,借用 lambda 表达式可以让我们的程序设计更加简洁.最近新的项目摒弃了 6th 版本,全面基于 8th 进行开发,本文将 ...

  6. 【Java】函数式编程思想-Lambda表达式

    面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情. 函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程 Java 8(JDK 1.8 ...

  7. Java—一篇读懂java集合(Collection/Map)及Lambda表达式

    集合简介   在集合类之前,我们使用数组存储,数组既可以存储基本数据类型的值,也可以存储对象(对象的引用变量),但是集合只能存储对象.   Java集合类似于一种容器,将同类型的对象(实际为对象引用) ...

  8. java thread lambda_Java8新特性--Lambda表达式

    从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能. 很长一段时间java被吐槽是冗余和缺乏函数式编程能力的语言,随着函数式编程的流行java8种也引入了 这 ...

  9. 【Java】Java8新特性Lambda表达式和Stream API

    Lambda表达式是实现支持函数式编程技术的基础. 函数式编程与面向对象编程:函数式编程将程序代码看作数学中的函数,函数本身作为另一个函数参数或返回值,即高阶函数.而面向对象编程按照真实世界客观事物的 ...

  10. 【java学习之路】(java SE篇)013.lambda表达式

    lambda表达式 Lambda表达式是 Java8 中最重要的新功能之一.使用 Lambda 表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看起来更简洁易懂.Lambda表达式同时还 ...

最新文章

  1. 10怎么设置pg接口_西门子S7300 PLC时间日期怎么读取?
  2. git对指定commitid 打tag_git 回退版本到之前提交的tag或commit内容代码
  3. 咪咕阅读怎么下载小说
  4. 使用java自动下载网易云音乐
  5. WTP 线程池管理系统,修改配置后能够实时刷新
  6. 微信小程序(八)实战——加载图片images
  7. RStudio启动报错(fatal error)
  8. use SWR为什么能成为我的最爱React库?
  9. 北京大学暑期学校总结
  10. 计算机模拟在数学实验报告,MATLAB实验-8计算机模拟.doc
  11. Day18-sessioncookie
  12. debian 有用的源
  13. matlab下载小木虫,小木虫关于fluent知识集合-个人总结
  14. 项目如何进行压力测试?
  15. c语言如何重命名文件夹,VC 复制移动删除重命名文件文件夹
  16. python plot 增加标记线,matplotlib初学:这样画折线图和添加标注、箭头
  17. Html+css+JavaScript做一个随机点名器
  18. 乐理基础知识-5.和弦
  19. 简单的抽卡模拟器1.0
  20. [ctfshow]终极考核wp

热门文章

  1. 微服务的真相(一)服务拆的太小,后面迭代忍不了
  2. 关于seata分布式事务框架的几个问题
  3. 使用python来构造有向随机网络
  4. docker开启mysql的binlog日志
  5. eureka注册中心之服务提供者
  6. fastcgi_param 详解
  7. CentOS6.9快速安装配置svn
  8. Django 源码阅读
  9. Drupal常用开发工具(一)——Devel模块
  10. JS中比较两个对象是否相等