逐步优化看出Java8的强大
来源:互联网 发布:canon mp288清零软件 编辑:程序博客网 时间:2024/05/22 17:58
1、Java8的核心是lambda编程和Stream API
下面通过一个例子讲明Java8的强大
2.类employee 包含{private String name; private int age ; private double salary;}三个属性,构造器和get set方法省略
需求:a.输出年龄>35的员工信息 b.输出工资>5000的员工信息 c.输出工资<3000的员工信息
List<Employee> emps = Arrays.asList(new Employee(101, "张三", 18, 9999.99),new Employee(102, "李四", 59, 6666.66),new Employee(103, "王五", 28, 3333.33),new Employee(104, "赵六", 8, 7777.77),new Employee(105, "田七", 38, 5555.55));
(1)最长见的方法,写一个满足需求的方法,但是这种方式很冗余,当有新的需求加入时,必须重新修改程序
//需求:获取公司中年龄小于 35 的员工信息public List<Employee> filterEmployeeAge(List<Employee> emps){List<Employee> list = new ArrayList<>();for (Employee emp : emps) {if(emp.getAge() <= 35){list.add(emp);}}return list;}@Testpublic void test3(){List<Employee> list = filterEmployeeAge(emps);for (Employee employee : list) {System.out.println(employee);}}//需求:获取公司中工资大于 5000 的员工信息public List<Employee> filterEmployeeSalary(List<Employee> emps){List<Employee> list = new ArrayList<>();for (Employee emp : emps) {if(emp.getSalary() >= 5000){list.add(emp);}}return list;}(2)优化方式:设计模式 策略
方式一如果新引入需求必须修改源码,所以可以采用策略设计模式:创建一个抽象主题 声明一个方法,根据需求创建具体主题实现抽象主题中的方法,只要调用具体类中的该方法即可。
缺点:每一种需求都要创建一个类,虽然不用改动原有代码,但是当需求多时类的数目多。
package com.atguigu.java8;@FunctionalInterfacepublic interface MyPredicate<T> {public boolean test(T t);}
public class FilterEmployeeForAge implements MyPredicate<Employee>{@Overridepublic boolean test(Employee t) {return t.getAge() <= 35;}}
package com.atguigu.java8;public class FilterEmployeeForSalary implements MyPredicate<Employee> {@Overridepublic boolean test(Employee t) {return t.getSalary() >= 5000;}}
//优化方式一:策略设计模式public List<Employee> filterEmployee(List<Employee> emps, MyPredicate<Employee> mp){List<Employee> list = new ArrayList<>();for (Employee employee : emps) {if(mp.test(employee)){list.add(employee);}}return list;}@Testpublic void test4(){List<Employee> list = filterEmployee(emps, new FilterEmployeeForAge());for (Employee employee : list) {System.out.println(employee);}System.out.println("------------------------------------------");List<Employee> list2 = filterEmployee(emps, new FilterEmployeeForSalary());for (Employee employee : list2) {System.out.println(employee);}}
(3)因为(2)的缺点,所以采用新的优化方式:匿名内部类
//优化方式二:匿名内部类@Testpublic void test5(){List<Employee> list = filterEmployee(emps, new MyPredicate<Employee>() {@Overridepublic boolean test(Employee t) {return t.getId() <= 103;}});for (Employee employee : list) {System.out.println(employee);}}
(4)为去除(3)的冗余,可采用lambda编程
public List<Employee> filterEmployee(List<Employee> emps, MyPredicte<Employee> mp){List<Employee> list = new ArrayList<>();for (Employee employee : emps) {if(mp.test(employee)){list.add(employee);}}return list;}public void test6(){List<Employee> list = filterEmployee(emps, (e) -> e.getAge() <= 35);list.forEach(System.out::println);System.out.println("------------------------------------------");List<Employee> list2 = filterEmployee(emps, (e) -> e.getSalary() >= 5000);list2.forEach(System.out::println);}
(5)Stream 流来操作
public void test7(){emps.stream().filter((e) -> e.getAge() <= 35).forEach(System.out::println);System.out.println("----------------------------------------------");emps.stream().map(Employee::getName).limit(3).sorted().forEach(System.out::println);}
0 0
- 逐步优化看出Java8的强大
- Java8之强大的Stream API
- JAVA8新特性[第四季]-强大的Stream API
- JAVA8新特性[第四季]-强大的Stream API
- Java8学习记录(三)-强大的collect操作
- 素数算法逐步优化
- 素数算法逐步优化
- listView 逐步优化
- marquee:已经被逐步舍弃掉的强大的模拟滚动的标签
- 最大连续子串和的逐步优化
- Java8优化优先检索缓存的代码
- 11、素数算法逐步优化
- Android 自定义适配器逐步优化
- jeecms 强大的采集功能优化
- 小小的笑话,看出人生哲理
- 如何看出自己的进步
- 从这件事看出的飞鸽传书
- 简历看出一个人的性格
- 蓝桥杯 历届试题 危险系数
- 关于STM8S IAR 无法下载程序,以及无法进去中断的问题
- Ubuntu16.04下搜狗输入法无法输入中文
- 汽车加油问题
- 单因素方差分析,卡方检验,充分条件必要条件
- 逐步优化看出Java8的强大
- 初始化指针是否需要分配内存空间
- 20个位运算技巧
- 《剑指offer》-用两个栈实现队列
- 贪心算法(2)
- 《机器学习实战》第三章:决策树(1)基本概念
- 【Java之IO】1.字节流和字符流
- Vue.js学习系列(四十四)-- 自定义事件
- 删数问题