JAVA 8 In Action 读书笔记 (一) : Lambda

来源:互联网 发布:地方门户源码论坛 编辑:程序博客网 时间:2024/06/05 17:19

首先定义一个测试对象

//POJO, Person对象public class Person {    private String name;    private int weight;    public Person(String name, int weight) {        super();        this.name = name;        this.weight = weight;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getWeight() {        return weight;    }    public void setWeight(int weight) {        this.weight = weight;    }    @Override    public String toString() {        // TODO Auto-generated method stub        return name+" : "+ weight +" KG ";    }}

定义接口,用来服务lambda

public interface CustomPredicate<T> {    //所有只有一个方法(不包括default方法)的接口都可以用做lambda表达式    boolean test(T t);    // JAVA8中的方法可以包含实现,方便类库的API升级。    // 此方法只是展示default方法的作用,并无使用    default void println(String log) {        System.out.println(log);    }}

具体的测试类

public class Demo {    public static void main(String[] args) {        List<Person> source= Arrays.asList(new Person("Li Lei", 90),new Person("Han Meimei", 60),new Person("Xiao wang", 82),new Person("Xiao zhang", 50));        //找到体重大于80KG的人        //采用匿名类方式        List<Person> target1= customFilter(source, new CustomPredicate<Person>() {            @Override            public boolean test(Person t) {                if(t.getWeight()>80) {                    return true;                }                return false;            }        });        //采用Lambda表达式        List<Person> target2= customFilter(source, (person)->person.getWeight()>80 );        //采用streamLambda        List<Person> target3=source.stream().filter((person)->person.getWeight()>80).collect(Collectors.toList());        System.out.println("匿名类结果 : "+Arrays.toString(target1.toArray()));        System.out.println("自定义接口的Lambda 结果 : "+Arrays.toString(target2.toArray()));        System.out.println("Stream版本的Lambda 结果 : "+Arrays.toString(target2.toArray()));    }    static List<Person> customFilter(List<Person> source, CustomPredicate<Person> p){        List<Person> target=  new ArrayList<>();        for(Person person: source) {            if(p.test(person)) {                target.add(person);            }        }        return target;    }}

运行结果:

匿名类结果 : [Li Lei : 90 KG , Xiao wang : 82 KG ]
自定义接口的Lambda 结果 : [Li Lei : 90 KG , Xiao wang : 82 KG ]
Stream版本的Lambda 结果 : [Li Lei : 90 KG , Xiao wang : 82 KG ]

Github源码
Eclipse工程源码

原创粉丝点击