java - Group objects in list by multiple fields -
i have simple object this
public class person{ private int id; private int age; private string hobby; //getters, setters } i want group list of person attributes
output should this
person count/age/hobby 2/18/basket 5/20/football with chart more understanding
x axis : hobby repartition y axis : count of person distribution
colors represents age
i managed group 1 attribute using map, can't figure how group multiples attributes
//group age . want group hobby personmapgroupped = new linkedhashmap<string, list<person>>(); (person person : listperson) { string key = person.getage(); if (personmapgroupped.get(key) == null) { personmapgroupped.put(key, new arraylist<person>()); } personmapgroupped.get(key).add(person); } then retrieve groupable object this
(map.entry<string, list<person>> entry : personmapgroupped .entryset()) { string key = entry.getkey();// group age string value = entry.getvalue(); // person count // want retieve group hobby here too... } any advice appreciated. thank much
implement methods comparing people according different fields. instance, if want group age, add method person:
public static comparator<person> getagecomparator(){ return new comparator<person>() { @override public int compare(person o1, person o2) { return o1.age-o2.age; } }; } then can call: arrays.sort(people,person.getagecomparator()) or use following code sort collection:
list<person> people = new arraylist<>(); people.sort(person.getagecomparator()); to sort using more 1 comparator simultaneously, first define comparator each field (e.g. 1 age , 1 names). can combine them using comparatorchain. use comparatorchain follows:
comparatorchain chain = new comparatorchain(); chain.addcomparator(person.getnamecomparator()); chain.addcomparator(person.getagecomparator()); 
Comments
Post a Comment