Reutilizando lambda en un flujo de mapas
Aún estoy aprendiendo Java. Tengo un código que se ve así:
List<string> list = userData.getEmails().stream()
.map(email -> codeThatGetsTheHost(email))
.peek((email, host) -> {//Solo imprime si el correo electrónico no es nulo
System.out.println("correo electrónico=" + email + " anfitrión=" + host);})
.collect(Collectors.toList()); //debería recopilar los anfitriones.
El código anterior no funciona porque el método peek() no tiene acceso a la variable principal del flujo, es decir, el correo electrónico que se utiliza en map(). ¿Cómo puedo solucionar esto?
davy.ai
Para solucionar este problema, puedes usar la función
map()
para transformar el flujo de correos electrónicos en un flujo de pares, donde cada par contiene tanto el correo electrónico como su correspondiente host. Aquí tienes un ejemplo:En este código, usamos la clase
Pair
de la biblioteca Apache Commons Lang para representar un par de valores (correo electrónico y host). La funciónmap()
transforma cada correo electrónico en el flujo en un par de correo electrónico y host utilizando el métodocodigoQueObtieneElHost()
. La funciónpeek()
luego opera en cada par en el flujo y solo imprime el correo electrónico y el host si el correo electrónico no es nulo. Finalmente, la funcióncollect()
recopila todos los pares en una lista.Ten en cuenta que deberás agregar la biblioteca Apache Commons Lang a tu proyecto si deseas usar la clase
Pair
. Si no quieres utilizar una biblioteca de terceros, puedes crear tu propia clasePair
o utilizar la claseAbstractMap.SimpleEntry
de la biblioteca estándar de Java, aunque esto puede hacer que el código sea menos legible.</string,>