什么是为这种层次结构实现过滤器的最佳方法

时间:2015-04-28 21:17:09

标签: java filter hierarchy

我有这种层次结构:

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! 结构也是固定的。我无法改变它。我可以添加方法和类并更改现有方法,但根本不能更改结构。

1 个答案:

答案 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());
}