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 ...
随机推荐
- zabbix设置中文并解决乱码问题
1.登录页面,设置中文 如下 2.解决乱码 进入本地PC的C:\Windows\Fonts,找到微软雅黑字体,复制粘贴,粘贴默认会生成两个文件 将msyh.ttf文件上传至zabbix服务器/usr/ ...
- Mac终端的Cocoapods的安装及使用
阅读目录 第一步,首先要检查Mac是否安装了rvm.打开终端,输入指令 rvm -v 第二步,用rvm安装ruby环境 第三步,检查更新RubyGems(Ruby1.9.1 以后的版本自带RubyGe ...
- sql server 按外键分组查询
SELECT ROW_NUMBER() over(partition by a.yngrbsh order by a.SFRQ desc ) RN, c.' and a.LSH not in(sele ...
- jquery中选取兄弟节点的方法
$('#id').siblings() 当前元素所有的兄弟节点$('#id').prev() 当前元素前一个兄弟节点$('#id').prevaAll() 当前元素之前所有的兄弟节点$('#id'). ...
- router 设置时 模板的新引法
{ path: '/Index1', name: 'Index', component: () => import ('@/components/Index.vue') },
- maven项目里jar包显示灰色
在spring boot项目加载Junit jar包之后,发现jar的颜色是灰色的,和其它的不一样. 带着好奇问了问身边的大神,大神解释说是因为pom文件里依赖项带上了<scope>tes ...
- 分布式任务队列Celery入门与进阶
一.简介 Celery是由Python开发.简单.灵活.可靠的分布式任务队列,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务.Celery侧重于实时操作,但对调度支持也很好,其 ...
- mvc,EntityFramework调用分页存储过程
此文讲述mvc4+entityframework6+sqlserver2008环境下调用存储过程,实现分页. 1.分页存储过程代码如下: 分页原理用的row_number()和over()函数实现(没 ...
- document数据路由
(1)document数据路由的理解:我们知道,一个index的数据会被分为多片,每片都在一个shard中,所以说,一个document,只能存在于一个shard中.当客户端创建document的时候 ...
- oracle用户被锁
使用PLSQL客户端:1.用管理员账户登录PLSQL Developer(登录名可以为system,选择类型的时候把Normal修改为Sysdba).2.左侧选择My Objects,查看Users文 ...