Próbuję grupować listę obiektów według atrybutów mulitple, używając Java 8 Collection-Stream.Dynamiczne grupowanie według określonych atrybutów z Collection.stream
Działa to całkiem dobrze:
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)));
Ale chciałbym zrobić to trochę bardziej dynamiczny. Chcę tylko określić String-Array (lub List), które powinny być używane do GroupBy.
Coś jak:
Object groupListBy(List data, String[] groupByFieldNames)
{
//magic code
}
i chcę zadzwonić:
groupListBy(data, new String[]{"type","module"});
Jak mogę sprawić, że GroupBy-Metoda bardziej dynamiczny, jak w moim przykładzie?