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 ...
随机推荐
- NULL - AUTO_INCREMENT
http://dev.mysql.com/doc/refman/5.7/en/create-table.html Data Types and Attributes for Columns data_ ...
- Mac 下的 C++ 开发环境
1. Xcode 创建 C++ 项目 Xcode (版本 4.6.3)默认支持创建 C++ 项目,步骤很简单:打开 Xcode,新建一个项目:在 OS X 中的 Application 中选择 Com ...
- 《Redis 垃圾回收》
推荐一首歌 - <纸短情长> 花粥 很好听 一:redis的垃圾回收 - 为了可以使用更多的内存,redis有一套自己的键值淘汰机制. - 修改 maxmemory参数,限制Redis使用 ...
- luogu4389 付公主的背包
题目链接:洛谷 题目大意:现在有$n$个物品,每种物品体积为$v_i$,对任意$s\in [1,m]$,求背包恰好装$s$体积的方案数(完全背包问题). 数据范围:$n,m\leq 10^5$ 这道题 ...
- 关系型数据库与NoSQL数据库的优劣
当大家学习了一定的NoSQL知识以后,了解了现今许多NoSQL数据库(如HBase,MongoDB,Redis等)时,就会觉得关系型数据库可能已经跟不上时代的步伐.其实并不然,关系型数据库的性能绝对不 ...
- MySQL模拟Oralce闪回操作
在前面的文章中我们介绍了MySQL误操作后数据恢复(update,delete忘加where条件),大概操作是通过sed命令把binlog中相关SQL误操作给逆向回来,然后导入SQL文件来恢复错误操作 ...
- sql server系统存储过程大全
关键词:sql server系统存储过程,mssql系统存储过程 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 x ...
- Http服务基础原理
http服务相关解释 http : Hyper Text Transfer Protocol, 80/tcp 超文本传输协议,基于tcp传输协议的80端口传输 html: Hyper Text M ...
- 004-mac上安装以及Nginx 配置文件nginx.conf详解
1.mac上nginx安装 安装brew:go-001-环境部署,IDEA插件 安装nginx: brew search nginx brew install nginx 当然也可以编译安装 安装完以 ...
- 小程序要求的 TLS 版本必须大于等于 1.2
1.打开windows powershell 右击屏幕左下角的开始->所有程序->附件->“Windows PowerShell”. 2.在 PowerShell中运行以 ...