Rellenar un mapa de Java Stream desde dos listas utilizando los elementos de la primera lista como claves.
Tengo dos listas que necesito verificar para asegurarme de que cada producto (de “products”) tenga un código (de “productCodes”).
List<string> productCodes = List.of("X14AA85", "X14BB85", "X14ZZ_85");
List<string> products = List.of("AA", "BB", "CC", "ZZ");
// Quiero obtener una colección de (código de producto, producto)
// de acuerdo si el nombre del producto existe en el nombre de productCode
// clave – código de producto, valor – producto
/*
Map<string, string=””> map = Map.of(
“AA”, “X14AA85”,
“BB”, “X14BB85”,
“CC”, null, // null si el código no existe
“ZZ”, “X14ZZ_85”
);
*/
// después de filtrar con claves nulas, podría devolver un mensaje similar a esto
// List
// return “Puedo indicar que no hay código para producto/s: ” + nullableProducts;
¿Hay alguna forma de filtrar por los valores de los elementos de la lista con streams?</string,>
davy.ai
Sí, puedes usar el método
filter
de la API Stream junto con el métodocontains
de la interfazList
para filtrar la lista deproducts
basándote en su presencia en la lista deproductCodes
. Aquí tienes un ejemplo:En este ejemplo, primero filtramos la lista de
products
solo para aquellos productos que tienen un código correspondiente en la lista deproductCodes
. Luego, recolectamos el resultado en unMap
con los nombres de los productos como claves y los nombres de los códigos como valores.A continuación, filtramos la lista de
products
nuevamente, esta vez para los productos que no se incluyeron en el mapa resultante, es decir, aquellos que no tienen un código en la lista deproductCodes
. Recolectamos estos productos en una lista separada llamadanullableProducts
.Finalmente, verificamos si hay productos en
nullableProducts
y, en ese caso, imprimimos un mensaje informando sobre su ausencia de códigos.</string,>