Java8新特性Lambda表达式
2017-06-02 21:31
351 查看
package cn.mldn.java8;
//Lambda表达式是一个匿名函数,可以直接传递代码,灵活性很强
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import org.junit.Test;
public class TestLambda {
//匿名内部类
@Test
public void test1()
{
Comparator<Integer> com=new Comparator<Integer>() {
@Override
public int compare(Integer o1,Integer o2) {
return Integer.compare(o1,o2);//核心代码
}
};
TreeSet<Integer> ts=new TreeSet<Integer>(com);
}
//Lambda表达式
@Test
public void test2()
{
Comparator<Integer> com=(o1,o2)->
{
return Integer.compare(o1,o2);//核心代码
};
TreeSet<Integer> ts=new TreeSet<Integer>(com);
}
List<Employee> employees=Arrays.asList(
new Employee("小赵",20,9000),
new Employee("小王",21,8000),
new Employee("小张",35,7000),
new Employee("小李",36,6000),
new Employee("小刘",37,5000)
);
//获取当前公司中员工年龄大于35的员工信息
@Test
public void test3()
{
List<Employee> emps=filterEmployee(employees);
for(Employee emp:emps)
{
System.out.println(emp);
}
}
//获取当前公司中员工工资大于7000的员工信息
@Test
public void test4()
{
List<Employee> emps=filterEmployee2(employees);
for(Employee emp:emps)
{
System.out.println(emp);
}
}
//获取当前公司中员工年龄大于35的员工信息(JDK1.8以前)
public List<Employee> filterEmployee(List<Employee> list)
{
List<Employee> emps=new ArrayList<Employee>();
for(Employee emp:list)
{
if(emp.getAge()>=35)
emps.add(emp);
}
return emps;
}
//获取当前公司中员工工资大于7000的员工信息(JDK1.8以前)
public List<Employee> filterEmployee2(List<Employee> list)
{
List<Employee> emps=new ArrayList<Employee>();
for(Employee emp:list)
{
if(emp.getSalary()>=7000)
emps.add(emp);
}
return emps;
}
//以上方法出现了代码冗余,核心代码不同,其余代码相同
//优化方式:Lambda表达式
public List<Employee> filterEmployee(List<Employee> list,MyPredicate<Employee> mp)
{
List<Employee> emps=new ArrayList<Employee>();
for(Employee emp:list)
{
if(mp.test(emp))
emps.add(emp);
}
return emps;
}
//使用Lambda表达式输出接口实现类中的核心代码
@Test
public void test5()
{
List<Employee> emps=filterEmployee(employees,(emp)->emp.getSalary()>7000);
emps.forEach(System.out::println);
}
//再优化:Stream API
@Test
public void test6()
{
employees.stream().filter((emp)->emp.getSalary()<=5000).forEach(System.out::println);
}
}
//Lambda表达式是一个匿名函数,可以直接传递代码,灵活性很强
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import org.junit.Test;
public class TestLambda {
//匿名内部类
@Test
public void test1()
{
Comparator<Integer> com=new Comparator<Integer>() {
@Override
public int compare(Integer o1,Integer o2) {
return Integer.compare(o1,o2);//核心代码
}
};
TreeSet<Integer> ts=new TreeSet<Integer>(com);
}
//Lambda表达式
@Test
public void test2()
{
Comparator<Integer> com=(o1,o2)->
{
return Integer.compare(o1,o2);//核心代码
};
TreeSet<Integer> ts=new TreeSet<Integer>(com);
}
List<Employee> employees=Arrays.asList(
new Employee("小赵",20,9000),
new Employee("小王",21,8000),
new Employee("小张",35,7000),
new Employee("小李",36,6000),
new Employee("小刘",37,5000)
);
//获取当前公司中员工年龄大于35的员工信息
@Test
public void test3()
{
List<Employee> emps=filterEmployee(employees);
for(Employee emp:emps)
{
System.out.println(emp);
}
}
//获取当前公司中员工工资大于7000的员工信息
@Test
public void test4()
{
List<Employee> emps=filterEmployee2(employees);
for(Employee emp:emps)
{
System.out.println(emp);
}
}
//获取当前公司中员工年龄大于35的员工信息(JDK1.8以前)
public List<Employee> filterEmployee(List<Employee> list)
{
List<Employee> emps=new ArrayList<Employee>();
for(Employee emp:list)
{
if(emp.getAge()>=35)
emps.add(emp);
}
return emps;
}
//获取当前公司中员工工资大于7000的员工信息(JDK1.8以前)
public List<Employee> filterEmployee2(List<Employee> list)
{
List<Employee> emps=new ArrayList<Employee>();
for(Employee emp:list)
{
if(emp.getSalary()>=7000)
emps.add(emp);
}
return emps;
}
//以上方法出现了代码冗余,核心代码不同,其余代码相同
//优化方式:Lambda表达式
public List<Employee> filterEmployee(List<Employee> list,MyPredicate<Employee> mp)
{
List<Employee> emps=new ArrayList<Employee>();
for(Employee emp:list)
{
if(mp.test(emp))
emps.add(emp);
}
return emps;
}
//使用Lambda表达式输出接口实现类中的核心代码
@Test
public void test5()
{
List<Employee> emps=filterEmployee(employees,(emp)->emp.getSalary()>7000);
emps.forEach(System.out::println);
}
//再优化:Stream API
@Test
public void test6()
{
employees.stream().filter((emp)->emp.getSalary()<=5000).forEach(System.out::println);
}
}
相关文章推荐
- java8的新特性lambda表达式
- Java8新特性——Lambda表达式
- Java8新特性第1章(Lambda表达式)
- Java8新特性Stream API与Lambda表达式详解(1)
- Java8新特性-Lambda表达式
- Java8新特性--Lambda表达式
- Java8新特性整理之Lambda表达式(一)
- Java 8新特性:lambda表达式
- Java 8新特性:全新的Stream API和lambda表达式
- java8新特性---Lambda表达式
- Java8新特性-Lambda表达式
- Java 1.8 新特性之(Lambda表达式)
- android中使用java8新特性lambda表达式
- Java8特性详解 lambda表达式和StreamAPI
- java 8 新特性(2.Lambda表达式)
- Java8新特性之lambda表达式
- Java基础知识总结之1.8新特性lambda表达式
- 王一三学习笔记 | Java8新特性Lambda表达式
- Java8新特性lambda表达式有什么用(用法实例)
- 浅析Java8新特性Lambda表达式和函数式接口