【发布时间】:2018-08-16 04:38:56
【问题描述】:
给定一个人员列表:
class Person {
private Integer id;
private Integer age;
private String name;
private Long lat;
private Long lont;
private Boolean hasComputer;
...
根据一组条件(例如年龄在 30 到 32 岁之间),我想返回前 5 名拥有计算机的人。
我想先尝试匹配所有条件,但如果不起作用,请尝试匹配其中任何一个条件。
我想到了一种类似的方法,例如全文搜索将与排名系统一起使用?但我是 Stream 的新手,所以仍在寻找解决方法。
List<Person> persons = service.getListPersons();
persons.stream().filter(p -> p.getAge.equals(age) && p.hasComputer().equals(true)).allMatch()
有什么想法吗?谢谢!
-
编辑: 也许我可以创建一个谓词,例如
谓词谓词 = p -> p.getAge()
并首先尝试匹配所有条件,如果不可能,尝试匹配任何条件:
Persons.steam().allMatch(predicate).limit(5);
Person.steam().anyMatch(predicate).limit(5);
【问题讨论】:
-
否则我仍然可以为每个条件做一个循环和一堆条件,但我确定哪里应该是更好的方法。
-
什么是
Persons?是Person的列表吗? -
是的 - 很抱歉造成混淆 List
人
标签: filter java-8 java-stream predicate