我有这种层次结构:
public Collection<Event> filter(String category, String subcategory, String result);
我需要实现以下方法:
public Collection<Event> filter(String category, String subcategory, String result) {
Collection<Event> res = new HashSet<Event>();
for (Event event : events) {
if (event.getSubCategory().getCategory().getName().equals(category)) {
res.add(event);
}
if (event.getSubCategory().getName().equals(subcategory)) {
res.add(event);
}
for (Result result : event.getResult()) {
if (result.getName().equals(result)
&& event.getSubCategory().getName().equals(subcategory)
&& event.getSubCategory().getCategory().getName().equals(category)) {
res.add(event);
}
}
}
return res;
}
如果某些参数为null,则应返回所有可能性。
我创造的东西(它非常愚蠢,但只是在我脑海中):
import re
first = "6[Sup. 1e+02]"
result = re.findall(r"\s+(.*?)\]", first)
print result
我不想使用java 8! 结构也是固定的。我无法改变它。我可以添加方法和类并更改现有方法,但根本不能更改结构。
答案 0 :(得分:0)
您可以使用Java 8 streams过滤数据:
public Collection<Event> filter(String category, String subcategory, String result) {
Stream<Event> s = events.stream();
if (category != null) { // filter for category
s = s.filter(e -> e.getSubCategory().getCategory().equals(category));
}
if (subCategory != null) { // filter for sub category
s = s.filter(e -> e.getSubCategory().equals(subCategory));
}
if (result != null) { // filter for result
s = s.filter(e -> e.getResult()
.stream()
.anyMatch(r -> getResult().equals(result))
);
}
return s.collect(Collectors.toList());
}