Cómo usar corriente en Java 8 filtro de dos lista de objetos y valor ajustado a la nueva lista

trungitdn92:

I utilizando Java 8 y tengo dos se miran como objeto:

clase Persona:

public class Person {

    private String id;
    private String name;

    public Person() {
    }

    public Person(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

Person1 Clase:

public class Person1 {
    private String id;
    private String name;

    public Person1() {
    }

    public Person1(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person1{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

Tengo dos se miran lista como:

 List<Person> persons= Arrays.asList(new Person("1","A"),new Person("2","B"));
  List<Person1> persons1 = Arrays.asList(new Person1("3","C"),new Person1("1","F"));

Ahora quiero usar corriente java 8 bucle de dos listas y comparar. Si cualquier objeto en la lista de personas de igualdad con personas1, voy a crear una nueva lista y configurarlo con el nuevo valor. Ejemplo: Si Persona1 ( "1", "F") igual Persona ( "1", "A") porque i usando Identificación del compararlo, consigo nombre de Persona1 conjunto a persona. Resultado: Persona ( "1" F ") y añadirlo dos nueva lista.

Mi código cuando i utilizando para:

 for (Person person : persons) {
            for (Person1 person1 : persons1 ) {
                if (person1.getId().equals(person.getId())) {
                    person.setName(person1.getId());
                    break;
                }
            }
        }

Ahora quiero convertirla en corriente con la nueva imagen lista como:

 List<Person> personList =
                list.stream()
                        .filter (
                                person -> list1.stream()
                                        .anyMatch(person1 -> person1.getId()== person.getId()))
                        .collect(Collectors.toList());

Pero sólo filtrar persona. Quiero comparar dos objetos lista. Si es la misma identificación, quiero el nombre del objeto en conjunto personas1 a las personas. Sé que podemos usar el mapa de la corriente 8 java, pero no puedo cómo hacerlo. Por favor ayuda

Ravindra Ranwala:

Algunas tareas se logran mejor con las corrientes, y otros con iteración. Muchas tareas se logra mejor mediante la combinación de los dos enfoques. En esta solución corrientes se utilizan para construir el mapa y luego iteración se utiliza para actualizar la coincidencia de nombre de persona. Su solución se ejecuta en tiempo cuadrática Considerando que esta solución se ejecuta en tiempo lineal complejidad.

Map<String, String> idToNameMap = persons1.stream()
    .collect(Collectors.toMap(Person1::getId, Person1::getName, (a, b) -> a));
for (Person person : persons) {
    if (idToNameMap.containsKey(person.getId())) {
        person.setName(idToNameMap.get(person.getId()));
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=226800&siteId=1
Recomendado
Clasificación