所以我有这个“工作”的代码(为简单起见替换一些名称):
Map>> someMap =
someListOfClassA.stream()
.filter(...)
.collect(Collectors.groupingBy(SomeClassA::someCriteriaA,
Collectors.groupingBy(SomeClassA::someCriteriaB, GuavaCollectors.toImmutableList()
)
));
但是,我想更改此代码,以便在通过SomeClassA字段进行分组后,内部集合是SomeClassB.例如,如果类看起来像这样:
假设他们都拥有所有args构造函数
class SomeClassA {
String someCriteriaA;
String someCriteriaB;
T someData;
String someId;
}
class SomeClassB {
T someData;
String someId;
}
并且有一个方法:
public static Collection getSomeClassBsFromSomeClassA(SomeClassA someA) {
List listOfB = someMethod(someA);
return listOfB; // calls something using someClassA, gets a list of SomeClassB
}
我想将SomeClass Bs的结果列表展平为
Map>> someMap =
someListOfClassA.stream()
.filter(...)
. // not sure how to group by SomeClassA fields but result in a list of SomeClassB since one SomeClassA can result in multiple SomeClassB
我不确定这将如何适合上面的代码.如何将基于SomeClassB的一堆列表收集到SomeClassA的所有值的单个列表中?如果单个ClassA映射到单个ClassB,我知道如何使用Collectors.mapping使它工作,但由于每个ClassA导致多个ClassB,我不知道如何让它工作.
任何想法,将不胜感激.谢谢!