【Java】JDK8 学习 第二章

package com.read.JDK8.Chap02;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/***
 * JAVA8 实战 第二章
 */
public class Demo2_1_1_test {
    public static void main(String[] args) {
        List<People> inventory = Arrays.asList(
                new People("wang", 10),
                new People("wang", 10),
                new People("zhao", 30),
                new People("qian", 21),
                new People("qian", 15)
        );

        // 行为传递
        List<People> byNamePeople = filterPeopleByName(inventory, "wang");
        System.out.println("根据name参数 选择 ");
        System.out.println(byNamePeople);
        List<People> xwPeople = filter(inventory, new PeoloeNameWang());
        System.out.println("接口参数传递选择");
        System.out.println(xwPeople);
        List<People> tenPeople = filter(inventory, new PeopleAgeTen());
        System.out.println(tenPeople);
        List<People> tenWangPeople = filter(inventory, new PeopleWangorTen());
        System.out.println(tenWangPeople);
        List<People> lambdaPeople = filter(inventory, (People p) -> p.getName().equals("wang"));
        System.out.println(lambdaPeople);
        // 抽象方式选择数据处理
        List<People> listAp = filertTall(inventory, (People p) -> p.getName().equals("wang") || p.getAge() > 10);
        System.out.println(listAp);
    }


    public static List<People> filter(List<People> inventory, PeoplePredicate peoplePredicate) {
        List<People> result = new ArrayList<>();
        for (People p : inventory) {
            if (peoplePredicate.test(p)) {
                result.add(p);
            }
        }
        return result;
    }

    public static List<People> filterPeopleByName(List<People> inventory, String name) {
        List<People> result = new ArrayList<>();
        for (People p : inventory) {
            if (p.getName().equals(name)) {
                result.add(p);
            }
        }
        return result;
    }

    static <T> List<T> filertTall(List<T> list, Predicate<T> predicate) {
        // 抽象 list 接受更多的类型
        List<T> result = new ArrayList<>();
        for (T t : list) {
            if (predicate.test(t)) {
                result.add(t);
            }
        }
        return result;
    }

    interface Predicate<T> {
        boolean test(T t);
    }

    interface PeoplePredicate {
        boolean test(People p);
    }


    public static class People {
        private String name;
        private int age;

        public People(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return "People{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }

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

    static class PeoloeNameWang implements PeoplePredicate {
        public boolean test(People people) {
            return "wang".equals(people.getName());
        }
    }

    static class PeopleAgeTen implements PeoplePredicate {
        @Override
        public boolean test(People p) {
            return p.getAge() > 10;
        }
    }

    static class PeopleWangorTen implements PeoplePredicate {
        @Override
        public boolean test(People p) {
            return "wang".equals(p.getName()) || p.getAge() > 10;
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值