java - Whats the best way to implement a filter for this hierarchical structure -
i have hierarchical structure:
public class category { private integer id; private string name; public category(string name) { this.name = name; } public string getname() { return name; } } public class subcategory { private string name; private category category; public subcategory(string name, category category) { this.name = name; this.category = category; } public string getname() { return name; } public category getcategory(){ return category } } public class event { private string name; private subcategory subcategory; private collection<result> result; public event(string name, subcategory subcategory, collection<result> result) { this.name = name; this.subcategory = subcategory; this.result = result; } public string getname() { return name; } public subcategory getsubcategory() { return subcategory; } public collection<result> getresult() { return result; } } public class result { private integer id; private string result; public result(string result) { this.result = result; } public string getresult() { return result; } } i need implement following method:
public collection<event> filter(string category, string subcategory, string result); if of parameters null should return possibilities.
what created (its stupid in head):
public collection<event> filter(string category, string subcategory, string result) { collection<event> res = new hashset<event>(); (event event : events) { if (event.getsubcategory().getcategory().getname().equals(category)) { res.add(event); } if (event.getsubcategory().getname().equals(subcategory)) { res.add(event); } (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; } i dont want use java 8 ! structure fixed. cannot change it. can add methods , classes , change existing methods not change structure @ all.
you use java 8 streams filter data:
public collection<event> filter(string category, string subcategory, string result) { stream<event> s = events.stream(); if (category != null) { // filter category s = s.filter(e -> e.getsubcategory().getcategory().equals(category)); } if (subcategory != null) { // filter sub category s = s.filter(e -> e.getsubcategory().equals(subcategory)); } if (result != null) { // filter result s = s.filter(e -> e.getresult() .stream() .anymatch(r -> getresult().equals(result)) ); } return s.collect(collectors.tolist()); }
Comments
Post a Comment