Próbuję znaleźć intersection
dwóch list na podstawie pewnych warunków i wykonując kilka kroków. Nie udało się znaleźć sposób, aby to zrobić (w fazie uczenia się) :)Java 8 Lambda - przecięcie dwóch list
Double totalAmount = 0.00d;
Double discount = 0.00d;
List<OrderLineEntry> orderLineEntryList = orderEntry.getOrderReleases().stream().flatMap(orderReleaseEntry ->
orderReleaseEntry.getOrderLines().stream()).filter(orderLineEntry -> orderLineEntry.getStatus().equals("PP")
|| orderLineEntry.getStatus().equals("PD")).collect(Collectors.toList());
for (OrderLineEntry orderLineEntry : orderLineEntryList) {
for (SplitLineEntry splitLineEntry : splitReleaseEntry.getLineEntries()) {
if (splitLineEntry.getOrderLineId().equals(orderLineEntry.getId()) && splitLineEntry.getStatusCode() !=
"PX") {
totalAmount += orderLineEntry.getFinalAmount();
couponDiscount += orderLineEntry.getCouponDiscount() == null ? 0.00d : orderLineEntry.getCouponDiscount();
}
}
}
Jak widać, logika jest prosta
uzyskać wszystkie elementy z rzędu na podstawie jakiegoś filtra list
i przecinają się z innym list
i rób kilka rzeczy.
Najbardziej skutecznym sposobem znalezienia skrzyżowania jest użycie zestawu lub mapy. Proponuję skonstruować zestaw, zbierając odpowiednie groupingBy. –
@PeterLawrey, Czy możesz mi pomóc osiągnąć to samo z Lambdą. Tworzę listę tylko po to, aby znaleźć skrzyżowanie. Typowe kodowanie Java, użyłbym 'Map' :) – Reddy