1
,所以我有這樣的代碼,「工程」(更換一些名稱爲簡單起見):創建使用GROUPBY嵌套地圖,收集到不同類型的對象
Map<String, Map<String, ImmutableList<SomeClassA>>> 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;
}
我希望能夠改爲建立
Map<String, Map<String, ImmutableList<SomeClassB>>> someMap =
someListOfClassA.stream()
.filter(...)
. // not sure how to group by SomeClassA values while creating new SomeClassB instances
我我不知道這將如何適合上面的代碼。我如何構建SomeClassB基於SomeClassA的值實例?
任何想法,將不勝感激!
'Collectors.mapping(SomeClassB :: new,GuavaCollectors.toImmutableList())' – 4castle
@ 4castle - 你能提供一些關於如何工作的細節嗎?你如何從分組的SomeClassA對象中獲取值到新創建的SomeClassB實例中? – Otter
'SomeClassB :: new'可以用任何將某個'SomeClassA'實例轉換爲'SomeClassB'的lambda或方法引用來替換。 'Collectors.mapping'只是在收集下游收集器中的輸出之前通過函數運行該值。 – 4castle