【发布时间】:2017-10-14 08:13:28
【问题描述】:
假设我有一个外部 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 对象列表。
【问题讨论】:
标签: java lambda filter java-8 java-stream