Combinar ArrayList de enteros por la lógica específica

nanomader94:

Tengo ArrayList que contiene muchos ejemplos de mi clase simple modelo de usuario que contiene sólo 2 campos:

@Data
public class User {
    private String email;
    private ArrayList<Integer> lists; 
}    

Estoy insertando en las listas de campo de valores enteros, siempre 1 o 0 . Tener muchos objetos de usuario de clase, algunos de ellos están duplicados debido a que tienen el mismo correo electrónico dirección, pero diferentes listas .

Necesito combinar duplicados de usuarios en un objeto de usuario , también el cuidado de las listas de campo.

User user1 = new User('[email protected]', Arrays.asList(0, 1, 0, 1, 1)); 
User user2 = new User('[email protected]', Arrays.asList(0, 0, 0, 1, 1));
User user3 = new User('[email protected]', Arrays.asList(1, 1, 1, 1, 1));
/* merge duplicated objects into one */
User mergedUser = new User('[email protected]', Arrays.asList(1, 1, 1, 1, 1));

Estoy teniendo dificultades para implementar la lógica de la fusión de muchas listas en una sola. La lógica detrás de esto no es complicado: cada vez que había 1 , puso 1 en la lista fusionada. Tener muchas listas con 0 y sólo un 1 , da como resultado el valor 1 en definitiva, la lista fusionada.

¿Qué enfoque que debería adoptar para aplicar esta lógica para la fusión de las listas?

también:

Puede hacerlo como:

List<User> finalList = new ArrayList<>(users.stream()
        .collect(Collectors.toMap(User::getEmail, Function.identity(), (user1, user2) -> {
            List<Integer> l1 = user1.getLists();
            List<Integer> l2 = user2.getLists();
            List<Integer> merge = IntStream.range(0, l1.size())
                    .mapToObj(i -> (l1.get(i) == 0 && l2.get(i) == 0) ? 0 : 1)
                    .collect(Collectors.toList());
            return new User(user1.getEmail(), merge);
        })).values());

Supongo que te gusta

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