Si encuentras alguna incompatibilidad en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.
Solución:
El enfoque más simple es este:
List intersect = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
Necesito compararlos en asumir list1.id == list2.fk_id
Primero construye un conjunto de fk_id;
Set orderLineEntrSet = orderEntry.getOrderReleases().stream()
.flatMap(orderReleaseEntry ->
orderReleaseEntry.getOrderLines().stream())
.filter(orderLineEntry ->
String s = orderLineEntry.getStatus();
return "PP".equals(s) )
.map(e -> e.getId())
.collect(Collectors.toSet());
double[] totalAmount = 0.0 ;
double[] couponDiscount = 0.0 ;
orderLineEntryList.stream()
.flatMap(sre -> sre.getLineEntries().stream())
.filter(ole -> orderLineEntrySet.contains(ole.getOrderLineId())
.filter(ole -> !"PX".equals(ole.getStatusCode()))
.forEach(ole ->
totalAmount[0] += ole.getFinalAmount();
if (ole.getCouponDiscount() != null)
couponDiscount[0] += ole.getCouponDiscount();
);
Puede evitar el uso de una referencia a un array objeto mediante el uso de la función de reducción. por ejemplo, vea cómo se implementa Collectors.averagingDouble. Pero esto me parece más complicado.
Nota: esto es O(N) usando un conjunto de ID en lugar de usar una lista de ID coincidentes que sería O(N^2)
Comentarios y calificaciones del post
Si para ti ha sido provechoso este artículo, agradeceríamos que lo compartas con el resto programadores y nos ayudes a difundir nuestra información.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)