У меня есть объект с полем type1, который используется для создания первой группы, и у меня есть два поля, которые используются для создания второй группы. Но вторая группа всегда получает одно из этих трех значений (X, Y, Z). На данный момент я написал код, подобный этому:
Map<String, Map<String, Long>> result = objList.stream()
.collect(Collectors.groupingBy(Obj::type1,
Collectors.groupingBy(Obj::useTwoFieldToGetSecondGroup, Collectors.counting())))
В результате этого кода я получаю это:
{
"A":{
"Y":5,
"Z":3
},
"B":{
"Y":2,
"Z":1
},
"C":{
"X":2
},
"D":{
"X":6,
"Z":2
}
}
Но я знаю, что второй тип имеет всегда три типа значений, и я хочу видеть что-то вроде этого:
{
"A":{
"X":0,
"Y":5,
"Z":3
},
"B":{
"X":0,
"Y":2,
"Z":1
},
"C":{
"X":2,
"Y":0,
"Z":0
},
"D":{
"X":6,
"Y":0,
"Z":2
}
}
Есть ли какой-либо способ получить этот результат легко?
public classObj {
private String type1; //key of first map
private String field1; //second key calculated with this two fields
private String field2;
public String useTwoFieldToGetSecondGroup(){
//use field1 and field2 to get X or Y or Z
}
}
и Метод useTwoFieldToGetSecondGroup, подобный следующему: