Lambda引言
Lambda表达式:可以方便我们把方法当做参数传递
package airycode_java8.nice1; import org.junit.Test; import java.util.*; /**
* Created by admin on 2018/12/28.
*/
public class TestLambda { public static void main(String[] args) {
List<Employee> employees = filterEmployee(employeeList, new FilterEmployeeByAge());
System.out.println(employees);
System.out.println("-------------------------------------------");
List<Employee> employees2 = filterEmployee(employeeList, new FilterEmployeeBySalary());
System.out.println(employees2); System.out.println("=======================");
test1111();
} //匿名内部类
public void test(){
Comparator<Integer> com = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1,o2);
}
}; TreeSet<Integer> ts = new TreeSet<>(com);
} //Lambda表达式
public void testL(){
Comparator<Integer> com = (x,y)->Integer.compare(x,y);
TreeSet<Integer> ts = new TreeSet<>(com);
} //准备数据
static List<Employee> employeeList = Arrays.asList(
new Employee("张三",18,9999.99, Employee.Status.FREE),
new Employee("李四",38,5555.55,Employee.Status.BUSY),
new Employee("王五",50,6666.66,Employee.Status.VOCATION),
new Employee("赵六",16,3333.33,Employee.Status.FREE),
new Employee("田七",8,7777.77,Employee.Status.BUSY)
);
//需求:获取当前公司员工年龄大于35的员工的信息
public List<Employee> filterEmployees(List<Employee>employeeList){
List<Employee> emps = new ArrayList<>(); for (Employee emp:employeeList) {
if (emp.getAge() >= 35) {
emps.add(emp);
}
} return emps;
} //需求:改变1:获取当前公司员工工资大于5000的员工信息
public List<Employee> filterEmployees2(List<Employee>employeeList){
List<Employee> emps = new ArrayList<>(); for (Employee emp:employeeList) {
if (emp.getSalary()>=5000) {
emps.add(emp);
}
} return emps;
} //优化方式1:设计模式优(策略设计模式)化上述需求的改变
public static List<Employee> filterEmployee(List<Employee>employeeList,MyPredicate<Employee> mp){
List<Employee> emps = new ArrayList<>(); for (Employee emp:employeeList) {
if (mp.test(emp)) {
emps.add(emp);
}
} return emps;
} //优化方式2:匿名内部类
public static void test1111(){
List<Employee> list = filterEmployee(employeeList, new MyPredicate<Employee>() {
@Override
public boolean test(Employee employee) {
return employee.getSalary() <= 5000;
}
});
System.out.println(list);
} //优化方式2:匿名内部类
@Test
public void test5(){
List<Employee> list = filterEmployee(employeeList, new MyPredicate<Employee>() {
@Override
public boolean test(Employee employee) {
return employee.getSalary() <= 5000;
}
});
System.out.println(list);
} //优化方式3.Lambda表达式
@Test
public void test6(){
List<Employee> employees = filterEmployee(employeeList, employee -> employee.getSalary() <= 5000);
employees.forEach(System.out::println);
} //优化方式4.上述代码不存在的写法(Stream API)
@Test
public void test7(){
employeeList.stream().filter(employee -> employee.getSalary()<5000).forEach(System.out::println);
System.out.println("----------------------------");
//提取所有的名字
employeeList.stream().map(Employee::getName).forEach(System.out::println);
}
} 新建employee类: package airycode_java8.nice1; /**
* Created by admin on 2018/12/28.
*/
public class Employee { private String name;
private int age;
private double salary; private Status status; public Employee() {
super();
} public Employee(int age){
this.age = age;
} public Employee(String name, int age, double salary, Status status) {
this.name = name;
this.age = age;
this.salary = salary;
this.status = status;
} public Status getStatus() {
return status;
} public void setStatus(Status status) {
this.status = status;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} @Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
", status=" + status +
'}';
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; Employee employee = (Employee) o; if (age != employee.age) return false;
if (Double.compare(employee.salary, salary) != 0) return false;
return name != null ? name.equals(employee.name) : employee.name == null;
} @Override
public int hashCode() {
int result;
long temp;
result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
temp = Double.doubleToLongBits(salary);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
} public enum Status{
FREE,BUSY,VOCATION;
}
} package airycode_java8.nice1; /**
* Created by admin on 2018/12/28.
*/
public class FilterEmployeeByAge implements MyPredicate<Employee> { @Override
public boolean test(Employee employee) {
return employee.getAge()>=35;
}
} package airycode_java8.nice1; /**
* Created by admin on 2018/12/28.
*/
public class FilterEmployeeBySalary implements MyPredicate<Employee> { @Override
public boolean test(Employee employee) {
return employee.getSalary()>=5000;
}
} package airycode_java8.nice1; /**
* Created by admin on 2018/12/28.
*/
public interface MyPredicate<T> { public boolean test(T t); }
Lambda引言的更多相关文章
- 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...
- 泛型委托及委托中所涉及到匿名方法、Lambda表达式
泛型委托及委托中所涉及到匿名方法.Lambda表达式 引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到 ...
- 【原创】从策略模式闲扯到lambda表达式
引言 策略模式,讲这个模式的文章很多,但都缺乏一个循序渐进的过程.讲lambda表达式的文章也很多,但基本都是堆砌一堆的概念,很少带有自己的见解.博主一时兴起,想写一篇这二者的文章.需要说明的是,在看 ...
- 十分钟学会Java8:lambda表达式和Stream API
Java8 的新特性:Lambda表达式.强大的 Stream API.全新时间日期 API.ConcurrentHashMap.MetaSpace.总得来说,Java8 的新特性使 Java 的运行 ...
- 怒学Java8系列一:Lambda表达式
PDF文档已上传Github Github:https://github.com/zwjlpeng/Angrily_Learn_Java_8 第一章 Lambda 1.1 引言 课本上说编程有两种模 ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- SqlHelper简单实现(通过Expression和反射)1.引言
之前老大说要改变代码中充斥着各种Select的Sql语句字符串的情况,让我尝试着做一个简单的SqlHelper,要具有以下功能: 1.不要在业务代码中暴露DataTable或者DataSet类型: 2 ...
- C#进阶之全面解析Lambda表达式
引言 在实际的项目中遇到一个问题,我们经常在网上搜索复制粘贴,其中有些代码看着非常的简洁,比如Lambda表达式,但是一直没有去深入了解它的由来,以及具体的使用方法,所以在使用的时候比较模糊,其次,编 ...
- 感受lambda之美,推荐收藏,需要时查阅
一.引言二.java重要的函数式接口1.什么是函数式接口1.1 java8自带的常用函数式接口.1.2 惰性求值与及早求值2.常用的流2.1 collect(Collectors.toList())2 ...
随机推荐
- python selenium配置
写该博客时环境 mac 10.14.1 (18B75) python 3.7 pip (不用这个就是了,用pip3) $ pip --version pip 10.0.1 from /Users/wj ...
- i-chips融合芯片分析
适合做图像变形和融合 http://www.i-chips.co.jp/products/ma_non-deployment/c786.html 下面视频其实用了2个芯片,其中IP00C733用原始信 ...
- [knowledge] 停止等待协议
再读TCP/IP详解 说到流量控制, 可能便涉及了两方面 1. 停止等待协议. https://baike.baidu.com/item/%E5%81%9C%E6%AD%A2%E7%AD%89%E5% ...
- [skill] C语言数组名到底是个啥
1. 正常情况下,数组名是个地址常量. 2. sizeof(数组名)的时候,数组名就代表数字名,其类型为 type array[], 返回数组元素个数. 3. 除了2的情况以外,可以理解为一个指针常量 ...
- 【nginx,apache】thinkphp ,laravel,yii2开发运行环境搭建
缘由 经常会有人问xx框架怎么配置运行环境,这里我就给贴出吉祥三宝(Yii2,Laravel5,Thinkphp5 )的Nginx和Apache的配置,供大家参考 Nginx Yii2 server ...
- 【PyQt5-Qt Designer】PyQt5+pyecharts 实现GUI界面的数据可视化展示
先用纯Python代码写一个简单的小案例: from PyQt5.QtCore import QUrl from PyQt5.QtWidgets import QApplication,QWidget ...
- Apache SSL 服务搭建
Web服务器在默认情况下使用HTTP,这是一个纯文本的协议.正如其名称所暗示的,纯文本协议不会对传输中的数据进行任何形式的加密.而基于HTTP的Web服务器是非常容易配置,它在安全方面有重大缺陷.任何 ...
- php 的函数
一.函数定义及变量作用域 1. 函数的声明和调用 函数的目的是复用. [$variable=] function [name]([$param]){} 2. 变量的作用域 (1) 全局变量 函数内部想 ...
- python处理csv文档
在工作中遇到了使用python解析csv文件的问题,包括读写操作,下面参考官网文档,进行一下总结: 首先CSV (Comma Separated Values) ,也就是逗号分开的数值,可以用Note ...
- Laravel删除产品-CRUD之delete(destroy)
上一篇讲了Laravel编辑产品-CRUD之edit和update,现在我们讲一下删除产品,方法和前面的几篇文章类似,照着ytkah来操作吧 1,controller的function destroy ...