使用Java lambda的外部可配置过滤
发布时间:2020-12-15 04:38:44 所属栏目:Java 来源:网络整理
导读:假设我有一个外部 JSON: [{ "condition": "equals","field": "name","value": "jack" },{ "condition": "greater","field": "age","value": 25 }] 这意味着我想在名为“jack”和年龄的人的Person对象列表中进行检查. 25.使用Java 8过滤相当简单(显示的示例
假设我有一个外部
JSON:
[{ "condition": "equals","field": "name","value": "jack" },{ "condition": "greater","field": "age","value": 25 } ] 这意味着我想在名为“jack”和年龄>的人的Person对象列表中进行检查. 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对象列表. 解决方法
据我所知,这与流本身没什么关系.该过滤方法只是一个谓词,可以作为实例提供,例如从您可以创建的工厂方法.
static Predicate<Person> fromName(String value){ return p -> p.getName().equals(value); } 假设你有另一种方法: static Predicate<Person> fromAge(int value) { return p -> p.getAge() == value; } 因为Predicate.and,Predicate.or存在,你可以这样做: fromAge(12).and(fromName("jack")); 从而链接你的谓词 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |