List<ExpenseStatisticsDTO> aircraftByEmp = travelExpensesRepository.getAircraftByEmp(expenseStatisticsDTO); List<ExpenseStatisticsDTO> jtAirByEmp = travelExpensesRepository.getJTAirByEmp(expenseStatisticsDTO); 将以上两个List按ExpenseStatisticsDTO对象中的structNo字段和type相同求totalPrice总和
时间: 2024-01-13 13:03:05 浏览: 94
List<Long>转一维数组 Long[](csdn)————程序.pdf
5星 · 资源好评率100%
要将两个List按ExpenseStatisticsDTO对象中的structNo字段和type相同求totalPrice总和,可以使用Java 8的流(Stream)API。以下是一个示例代码:
```java
List<ExpenseStatisticsDTO> aircraftByEmp = travelExpensesRepository.getAircraftByEmp(expenseStatisticsDTO);
List<ExpenseStatisticsDTO> jtAirByEmp = travelExpensesRepository.getJTAirByEmp(expenseStatisticsDTO);
Map<String, Double> totalPriceMap = Stream.concat(aircraftByEmp.stream(), jtAirByEmp.stream())
.collect(Collectors.groupingBy(dto -> dto.getStructNo() + ":" + dto.getType(),
Collectors.summingDouble(ExpenseStatisticsDTO::getTotalPrice)));
List<ExpenseStatisticsDTO> mergedList = totalPriceMap.entrySet().stream()
.map(entry -> {
String[] keys = entry.getKey().split(":");
ExpenseStatisticsDTO dto = new ExpenseStatisticsDTO();
dto.setStructNo(keys[0]);
dto.setType(keys[1]);
dto.setTotalPrice(entry.getValue());
return dto;
})
.collect(Collectors.toList());
```
在上面的代码中,我们首先使用Stream.concat()方法将两个List合并成一个Stream。然后我们使用Collectors.groupingBy()方法按structNo和type分组,并使用Collectors.summingDouble()方法计算totalPrice的总和。这将返回一个Map<String, Double>,其中键是structNo和type的组合,值是totalPrice的总和。
接下来,我们使用Map.entrySet().stream()方法将Map转换为一个Stream,并使用map()方法将每个键值对转换为一个ExpenseStatisticsDTO对象。最后,我们使用Collectors.toList()方法将所有的ExpenseStatisticsDTO对象收集到一个List中。
请注意,这里我们假设structNo和type的组合是唯一的,如果不是,那么需要在计算totalPrice总和时进行适当的调整。
阅读全文