gpt4 book ai didi

java - 使用 Java lambda 的外部可配置过滤

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:40 24 4
gpt4 key购买 nike

假设我有一个外部 JSON 作为:

[{
"condition": "equals",
"field": "name",
"value": "jack"
},
{
"condition": "greater",
"field": "age",
"value": 25
}
]

这意味着我想在 Person 对象列表中检查姓名为 "jack"age > 25 的人。使用 Java 8 过滤非常简单(显示的示例仅按名称过滤)。

但是,我想让这个过滤器可配置,并且还应用多个过滤器。假设下面的 Person pojo(不言自明)采用姓名和年龄,我怎样才能使过滤器动态或可配置?

public class Person {
private String name;
private int age;

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

// Accessors and Mutators
}
List<Person> persons = Arrays.asList(
new Person("mkyong", 30),
new Person("jack", 20),
new Person("lawrence", 40)
);

Person result1 = persons.stream() // Convert to steam
.filter(x -> "jack".equals(x.getName())) // we want "jack" only
.findAny() // If 'findAny' then return found
.orElse(null);

我期待一个满足标准的 Person 对象列表。

最佳答案

据我所知,这与 streams 本身没什么关系。该过滤器方法只是一个 Predicate,它可以作为实例提供,例如来自您可以创建的工厂方法。

static Predicate<Person> fromName(String value){
return p -> p.getName().equals(value);
}

假设您有另一种方法:

static Predicate<Person> fromAge(int value) {
return p -> p.getAge() == value;
}

因为 Predicate.andPredicate.or 存在,你可以这样做:

 fromAge(12).and(fromName("jack"));

从而链接你的谓词

关于java - 使用 Java lambda 的外部可配置过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com