先写一个策略模式的经典应用:
一个公司有很多员工,计算所有员工的平均年龄和平均工资。
我们先写一个员工类,
public class Employee { public Employee(Sex sex, int salary){ this.sex = sex; this.salary = salary; } private Sex sex; private int salary; public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public Sex getSex() { return sex; } public void setSex(Sex sex) { this.sex = sex; } } enum Sex{ MALE, FEMALE }
再来写一个calculator接口和两个实现类:
public interface ICalculator { public double calAverageSalary(List<Employee> employees); } class MaleEmployeeCalculator implements ICalculator{ @Override public double calAverageSalary(List<Employee> employees) { return employees.stream().filter(t -> t.getSex() == Sex.FEMALE).mapToInt(Employee::getSalary).average().getAsDouble(); } } class FemaleEmployeeCalculator implements ICalculator{ @Override public double calAverageSalary(List<Employee> employees) { return employees.stream().filter(t -> t.getSex() == Sex.FEMALE).mapToInt(Employee::getSalary).average().getAsDouble(); } }
客户端代码:
public class Client { public static void main(String[] args) { List<Employee> employeeList = new ArrayList(); employeeList.add(new Employee(Sex.MALE, 8000)); employeeList.add(new Employee(Sex.MALE, 9000)); employeeList.add(new Employee(Sex.MALE, 10000)); employeeList.add(new Employee(Sex.MALE, 7000)); employeeList.add(new Employee(Sex.FEMALE, 8000)); employeeList.add(new Employee(Sex.FEMALE, 8000)); employeeList.add(new Employee(Sex.FEMALE, 9000)); employeeList.add(new Employee(Sex.FEMALE, 10000)); ICalculator maleEmployeeCalculator = new MaleEmployeeCalculator(); double mAverageSalary = maleEmployeeCalculator.calAverageSalary(employeeList); System.out.println("Male employees average salary is: " + mAverageSalary); ICalculator femaleEmployeeCalculator = new FemaleEmployeeCalculator(); double fmAverageSalary = femaleEmployeeCalculator.calAverageSalary(employeeList); System.out.println("Female employees average salary is: " + fmAverageSalary); } }
下面用lambda来实现策略模式:
Employee类不变,无需使用ICalculator接口
客户端代码
public class LambdaTestClient { public static void main(String[] args) { List<Employee> employeeList = new ArrayList(); employeeList.add(new Employee(Sex.MALE, 8000)); employeeList.add(new Employee(Sex.MALE, 9000)); employeeList.add(new Employee(Sex.MALE, 10000)); employeeList.add(new Employee(Sex.MALE, 7000)); employeeList.add(new Employee(Sex.FEMALE, 8000)); employeeList.add(new Employee(Sex.FEMALE, 8000)); employeeList.add(new Employee(Sex.FEMALE, 9000)); employeeList.add(new Employee(Sex.FEMALE, 10000)); double mAverageSalary = calAverageSalary(employeeList,t->t.getSex() == Sex.MALE); System.out.println("Male employees average salary is: " + mAverageSalary); double fmAverageSalary = calAverageSalary(employeeList,t->t.getSex() == Sex.FEMALE); System.out.println("Female employees average salary is: " + fmAverageSalary); } static double calAverageSalary(List<Employee> employees, Predicate<Employee> p){ return employees.stream().filter(p).mapToInt(Employee::getSalary).average().getAsDouble(); } }
相关推荐
Java8的lambda表达式
java8lambda表达式的安卓Studio工程Demo,供初步学习使用
将策略模式进行能力话,可作为jar包引入既可以使用,可用于实现架构的平台与业务分离的能力, 运用lambda表达式+策略模式+注解等知识点,提供给大家学习,也可将其优化并用于平台建设。对应博客:...
将策略模式进行能力话,可作为jar包引入既可以使用,可用于实现架构的平台与业务分离的能力, 运用lambda表达式+策略模式+注解等知识点,提供给大家学习,也可将其优化并用于平台建设
Java 8新特性之Lambda与函数式编程.pdf
说明:本文档主要讲解java8中的Lambda表达式。内容完全基于java 8 tutorial,加上一些自己的注释与理解。使用代码本身来进行解释(这是java 8 tutorial中的风格),同时去掉一些无关紧要的知识点(比如泛型等),...
Java 8 在 2013 年发布,Java 8 将支持 Lambda 功能,尽管该规范还在不断的变化,但是 Java 8 的开发版已经实现了对 lambda 的支持。
主要介绍了Java8使用lambda实现Java的尾递归的相关资料,需要的朋友可以参考下
Java8里面lambda的最佳实践Java开发Java经验技巧共7页.pdf.zip
java 8 初次使用者学习lambda的基本手册,通过练习可以快速掌握部分lambda语法,代码更加简洁
Java SE 8 Lambda Quick Start 中文版 -> :: 本教程介绍了Java Platform Standard Edition 8(Java SE 8)中包含的新的lambda表达式 Lambda表达式是Java SE 8中包含的一个新的重要功能。它们提供了一种清晰简洁的...
java8 lambda demo
java lambda表达式,...lambda 表达式是在 Java 8 中添加的,并提供以下功能。 启用将功能视为方法参数,或将代码视为数据。 可以在不属于任何类的情况下创建的函数。 lambda 表达式可以像对象一样传递并按需执行。
Java8之lambda最佳实践_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
Lambda表达式的学习在于 ,在实践中学习,在实践中理解。建议大家还是多写代码,多使用
( 13-Java-8-Lambda-Expressions-Part-1.pdf ) java 8 lambda- expressions 学习资料,例子。练习 java example
主要介绍了Java8 用Lambda表达式给List集合排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
视频地址:https://www.bilibili.com/video/BV1ut411g7E9 【Java8】Lambda表达式 和 Stream API 详解笔记 md文档
java8-lambda表达式的基础使用.pdf
JAVA 8 Lambda表达式-Lambda Expressions.rar