I am trying to group a list of objects by mulitple attributes, by using Java 8 Collection-Stream.
This works pretty well:
public class MyClass
{
public String title;
public String type;
public String module;
public MyClass(String title, String type, String module)
{
this.type = type;
this.title = title;
this.module= module;
}
}
List<MyClass> data = new ArrayList();
data.add(new MyClass("1","A","B"));
data.add(new MyClass("2","A","B"));
data.add(new MyClass("3","A","C"));
data.add(new MyClass("4","B","A"));
Object result = data.stream().collect(Collectors.groupingBy((MyClass m)
-> m.type, Collectors.groupingBy((MyClass m) -> m.module)));
But I would like to make it a little more dynamic. I just want to specify an String-Array (or List) which should be used to GroupBy.
Something like:
Object groupListBy(List data, String[] groupByFieldNames)
{
//magic code
}
and I want to call:
groupListBy(data, new String[]{"type","module"});
How can I make the groupBy-Method more dynamic, like in my example?
See Question&Answers more detail:os