Java利用lambda表达式按照指定要求进行查询--Predicate函数式接口的使用-方法二

创建一个商品类属性如下: 商品名,商品价格,商品库存 利用Lambda表达式,查询出如下内容:

1、查询出商品名中包含电脑的商品的信息

2、查询出所有价格在1000到2000之间的商品的信息

3、查询出库存在10以下的商品的信息

4、查询出库存在10以下且商品名中包含电脑两个字的商品的信息

5、查询库存在10到20之间的商品的信息

6、查询出售价在1000到2000之间且库存在10到20之间的名字中包含电脑的商品的信息

7、查询出商品名中不包含电脑的商品的信息

8、查询出所有价格在1000到2000之间或者库存在10以下的商品的信息。

方法一

public class Test1 {
    public static void main(String[] args) {
        Goods goods1 = new Goods("笔记本电脑", 5000, 20);
        Goods goods2 = new Goods("平板电脑", 4500, 15);
        Goods goods3 = new Goods("平板显示屏", 1999, 5);
        Goods goods4 = new Goods("充电器", 500, 25);
        Goods goods5 = new Goods("电脑键盘", 150, 19);
        Goods goods6 = new Goods("电脑显示屏", 1500, 7);
        ArrayList<Goods> list = new ArrayList<>();
        list.add(goods1);
        list.add(goods2);
        list.add(goods3);
        list.add(goods4);
        list.add(goods5);
        list.add(goods6);
        //方法一
        //1、查询出商品名中包含电脑的商品的信息
        System.out.println("查询出商品名中包含电脑的商品的信息");
        Inquire inquire1 = goods -> {
            char[] chars = goods.getName().toCharArray();//获取商品名称,将字符串转化为字符数组
            for (int i = 0; i < chars.length - 1; i++) {
                if (chars[i] == '电' && chars[i + 1] == '脑') {
                    return true;
                }
            }
            return false;
        };
        getEnquiries(list, inquire1);

        System.out.println("-------------");

        //2、查询出所有价格在1000到2000之间的商品的信息
        System.out.println("查询出所有价格在1000到2000之间的商品的信息");
        Inquire inquire2 = goods -> goods.getPrice() >= 1000 && goods.getPrice() <= 2000;
        getEnquiries(list, inquire2);

        System.out.println("-------------");

        //3、查询出库存在10以下的商品的信息
        System.out.println("查询出库存在10以下的商品的信息");
        Inquire inquire3 = goods -> goods.getInventory() < 10;
        getEnquiries(list, inquire3);

        System.out.println("-------------");

        //4、查询出库存在10以下且商品名中包含电脑两个字的商品的信息
        System.out.println("查询出库存在10以下且商品名中包含电脑两个字的商品的信息");
        Inquire inquire4 = goods -> {
            char[] chars = goods.getName().toCharArray();//获取商品名称,将字符串转化为字符数组
            for (int i = 0; i < chars.length - 1; i++) {
                if (chars[i] == '电' && chars[i + 1] == '脑') {
                    if (goods.getInventory() < 10){
                        return true;
                    }
                }
            }
            return false;
        };
        getEnquiries(list, inquire4);

        System.out.println("-------------");

        //5、查询库存在10到20之间的商品的信息
        System.out.println("查询库存在10到20之间的商品的信息");
        Inquire inquire5 = goods -> goods.getInventory() >= 10 && goods.getInventory() <= 20;
        getEnquiries(list, inquire5);

        System.out.println("-------------");

        //6、查询出售价在1000到2000之间且库存在10到20之间的名字中包含电脑的商品的信息
        System.out.println("查询出售价在1000到2000之间且库存在10到20之间的名字中包含电脑的商品的信息");
        Inquire inquire6 = goods -> goods.getInventory() >= 10 && goods.getInventory() <= 20 &&
                goods.getPrice() >= 1000 && goods.getPrice() <= 2000;
        getEnquiries(list, inquire6);

        System.out.println("-------------");

        //7、查询出商品名中不包含电脑的商品的信息
        System.out.println("查询出商品名中不包含电脑的商品的信息");
        Inquire inquire7 = goods -> {
            char[] chars = goods.getName().toCharArray();//获取商品名称,将字符串转化为字符数组
            for (int i = 0; i < chars.length - 1; i++) {
                if (chars[i] == '电' && chars[i + 1] == '脑') {
                    return false;
                }
            }
            return true;
        };
        getEnquiries(list, inquire7);

        System.out.println("-------------");

        //8、查询出所有价格在1000到2000之间或者库存在10以下的商品的信息
        System.out.println("查询出所有价格在1000到2000之间或者库存在10以下的商品的信息");
        Inquire inquire8 = goods -> goods.getInventory() <= 10 ||
                (goods.getPrice() >= 1000 && goods.getPrice() <= 2000);
        getEnquiries(list, inquire8);


    }

    public static void getEnquiries(ArrayList<Goods> list, Inquire inquire) {
        boolean flag = true;
        for (Goods goods : list) {
            if (inquire.getInquire(goods)) {
                System.out.println(goods);
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有满足条件的商品!");
        }
    }
}

接口

public interface Inquire {
    Boolean getInquire(Goods goods);
}

商品类


public class Goods {
    private String name;//名称
    private double price;//价格
    private int inventory;//库存

    public Goods(String name, double price, int inventory) {
        this.name = name;
        this.price = price;
        this.inventory = inventory;
    }

    public Goods() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getInventory() {
        return inventory;
    }

    public void setInventory(int inventory) {
        this.inventory = inventory;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "商品名称='" + name + '\'' +
                ", 商品价格=" + price +
                ", 商品库存=" + inventory +
                '}';
    }
}

方法二


public class Test2 {
    public static void main(String[] args) {
        Goods goods1 = new Goods("笔记本电脑", 4590, 20);
        Goods goods2 = new Goods("平板电脑", 4500.1, 15);
        Goods goods3 = new Goods("平板显示屏", 1999.9, 5);
        Goods goods4 = new Goods("充电器", 500.0, 25);
        Goods goods5 = new Goods("电脑键盘", 155, 19);
        Goods goods6 = new Goods("电脑显示屏", 1509, 7);
        ArrayList<Goods> list = new ArrayList<>();
        list.add(goods1);
        list.add(goods2);
        list.add(goods3);
        list.add(goods4);
        list.add(goods5);
        list.add(goods6);
        //方法二 ---- 函数式接口Predicate
        //1、查询出商品名中包含电脑的商品的信息
        System.out.println("查询出商品名中包含电脑的商品的信息");
        Predicate<Goods> predicate1 = goods -> {
            char[] chars = goods.getName().toCharArray();//获取商品名称,将字符串转化为字符数组
            for (int i = 0; i < chars.length - 1; i++) {
                if (chars[i] == '电' && chars[i + 1] == '脑') {
                    return true;
                }
            }
            return false;
        };
        getPredicate(list, predicate1);

        System.out.println("-------------");

        //2、查询出所有价格在1000到2000之间的商品的信息
        System.out.println("查询出所有价格在1000到2000之间的商品的信息");
        Predicate<Goods> predicate2 = goods -> goods.getPrice() >= 1000 && goods.getPrice() <= 2000;
        getPredicate(list, predicate2);

        System.out.println("-------------");

        //3、查询出库存在10以下的商品的信息
        System.out.println("查询出库存在10以下的商品的信息");
        Predicate<Goods> predicate3 = goods -> goods.getInventory() < 10;
        getPredicate(list, predicate3);

        System.out.println("-------------");

        //4、查询出库存在10以下且商品名中包含电脑两个字的商品的信息
        System.out.println("查询出库存在10以下且商品名中包含电脑两个字的商品的信息");
        Predicate<Goods> predicate4I = predicate3::test;
        Predicate<Goods> predicate4J = predicate1::test;
        Predicate<Goods> predicate4 = predicate4I.and(predicate4J);
        getPredicate(list, predicate4);

        System.out.println("-------------");

        //5、查询库存在10到20之间的商品的信息
        System.out.println("查询库存在10到20之间的商品的信息");
        Predicate<Goods> predicate5 = goods -> goods.getInventory() >= 10 && goods.getInventory() <= 20;
        getPredicate(list, predicate5);

        System.out.println("-------------");

        //6、查询出售价在1000到2000之间且库存在10到20之间的名字中包含电脑的商品的信息
        System.out.println("查询出售价在1000到2000之间且库存在10到20之间的名字中包含电脑的商品的信息");
        Predicate<Goods> predicate6I = predicate2::test;
        Predicate<Goods> predicate6J = predicate5::test;
        Predicate<Goods> predicate6 = predicate6I.and(predicate6J);
        getPredicate(list, predicate6);


        System.out.println("-------------");

        //7、查询出商品名中不包含电脑的商品的信息
        System.out.println("查询出商品名中不包含电脑的商品的信息");
        Predicate<Goods> predicate7 = predicate1.negate();
        getPredicate(list, predicate7);

        System.out.println("-------------");

        //8、查询出所有价格在1000到2000之间或者库存在10以下的商品的信息
        System.out.println("查询出所有价格在1000到2000之间或者库存在10以下的商品的信息");
        Predicate<Goods> predicate8I = predicate2::test;
        Predicate<Goods> predicate8J = predicate3::test;
        Predicate<Goods> predicate8 = predicate8I.or(predicate8J);
        getPredicate(list, predicate8);


    }

    public static void getPredicate(ArrayList<Goods> list, Predicate<Goods> predicate) {
        boolean flag = true;
        for (Goods goods : list) {
            if (predicate.test(goods)) {
                System.out.println(goods);
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有满足条件的商品!");
        }
    }

}

商品类同上

结果(两种方式结果相同)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MaGgIeOo0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值