您的位置:首页 > 编程语言 > Java开发

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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: