我有一个List<Provider>
,里面有List<Invoice>
;我想按照以下顺序重新排序:
public class Provider {
Long idProvider;
String name;
List<Invoice> invoiceList;
...
}
public class Invoice {
Long idInvoice;
Integer order;
BigDecimal value;
LocalDate dueDate;
...
}
但是,每个Provider
都在列表中多次填充,我需要对其重新排序,以便重复的Providers
留在一个单独的列表中,所有其他{{1}一起做;像这样:
Provider_A (记录1)
提供商_A (记录2)
预期:
Provider_A
我尝试使用Invoice
,它可以工作,但是它返回一个Collectors.groupingBy
,它必须是一个列表。我当时在考虑使用此方法,然后再切换到列表,但这似乎是一种解决方法,也许通过直接返回Map<Long, List<Provider>>
进行分组是一种更好的方法。有帮助吗?
答案 0 :(得分:4)
如果我对您的理解正确:
yourListOfProviders
.stream()
.collect(Collectors.toMap(
Provider::getIdProvider,
Function.identity(),
(left, right) -> {
left.getInvoiceList().addAll(right.getInvoiceList());
return left;
}))
.values();
答案 1 :(得分:1)
更痛苦的方式:
Collection<Optional<Provider>> ovalues =
yourListOfProviders.stream().collect(
Collectors.groupingBy(
Provider::getIdProvider,
Collectors.reducing((Provider left, Provider right) -> {
left.getInvoiceList().addAll(right.getInvoiceList());
return left;
})
)
).values();
List<Provider> values = ovalues.stream().map(Optional::get).collect(Collectors.toList());