创建一个商品类属性如下: 商品名,商品价格,商品库存 利用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("没有满足条件的商品!");
}
}
}
商品类同上
结果(两种方式结果相同)