У меня есть этот список объектов
List<DetailDto> details;
@Value
public class DetailDto implements Serializable {
String category1;
Integer category2;
Integer price;
transient Integer totalPrice;
}
с этим списком
[
{
"category1": "ABC",
"category2": 30,
"price": 195,
"totalPrice": null
},
{
"category1": "ABC",
"category2": 30,
"price": 195,
"totalPrice": null
},
{
"category1": "ABC",
"category2": 30,
"price": 195,
"totalPrice": null
},
{
"category1": "ABC",
"category2": 30,
"price": 390,
"totalPrice": null
},
{
"category1": "ABC",
"category2": 30,
"price": 390,
"totalPrice": null
},
{
"category1": "DEF",
"category2": 30,
"price": 455,
"totalPrice": null
},
{
"category1": "DEF",
"category2": 30,
"price": 455,
"totalPrice": null
},
{
"category1": "DEF",
"category2": 30,
"price": 455,
"totalPrice": null
},
{
"category1": "DEF",
"category2": 30,
"price": 455,
"totalPrice": null
},
{
"category1": "GHI",
"category2": 1,
"price": 18000,
"totalPrice": null
}
]
Я хочу создать еще один List<DetailDto>
объект, суммируя поле price
в totalPrice
поле, где условия:
- Строка
category1
общие - Целые числа
category2
общие - Целые числа
price
общие
на данный момент у меня есть это
List<List<DetailDto>> summarizedList = detail().stream()
.collect(Collectors.groupingBy(DetailDto::category1,
Collectors.groupingBy(DetailDto::category2,
Collectors.groupingBy(DetailDto::price))))
.values()
.stream()
.flatMap(c1 -> c1.values().stream())
.flatMap(c2 -> c2.values().stream())
.collect(Collectors.toList());
, которое возвращает меня List<List<DetailDto>>
, и я не знаю, как сделать это правильно 、 после того, как я попробую это
summarizedList.stream().map(dto -> dto.stream().reduce((x,y) -> new DetailDto(x.productCode(), x.productQt(), x.orderPrice(), Integer.sum(x.orderPrice(), y.orderPrice()).orElse(null).collect(Collectors.toList());
он вернется
[
{
"category1": "ABC",
"category2": 30,
"price": 195,
"totalPrice": 390
},
{
"category1": "ABC",
"category2": 30,
"price": 390,
"totalPrice": 780
},
{
"category1": "DEF",
"category2": 30,
"price": 455,
"totalPrice": 910
},
{
"category1": "GHI",
"category2": 1,
"price": 18000,
"totalPrice": null
}
]
где Что мне действительно нужно, это
[
{
"category1": "ABC",
"category2": 30,
"price": 195,
"totalPrice": 585
},
{
"category1": "ABC",
"category2": 30,
"price": 390,
"totalPrice": 780
},
{
"category1": "DEF",
"category2": 30,
"price": 455,
"totalPrice": 1820
},
{
"category1": "GHI",
"category2": 1,
"price": 18000,
"totalPrice": 18000
}
]
Можете ли вы помочь мне, ребята?