es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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:

    List<><string, string="">> pares = userData.getEmails().stream()
        .map(email -> new Pair<>(email, codigoQueObtieneElHost(email)))
        .peek(par -> {
            String email = par.getLeft();
            String host = par.getRight();
            if (email != null) {
                System.out.println("email=" + email + " host=" + host);
            }
        })
        .collect(Collectors.toList());
    

    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ón map() transforma cada correo electrónico en el flujo en un par de correo electrónico y host utilizando el método codigoQueObtieneElHost(). La función peek() 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ón collect() 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 clase Pair o utilizar la clase AbstractMap.SimpleEntry de la biblioteca estándar de Java, aunque esto puede hacer que el código sea menos legible.</string,>

Comments are closed.