Saltar al contenido

Java 8 Lambda – Intersección de dos listas

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *