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

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -