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.

Cómo verificar si una lista tiene más de 3 elementos utilizando Java8

Tengo un método que acepta una lista de objetos.

Quiero iterar a través de esa lista y verificar si la lista tiene más de 3 elementos. Si es así, quiero lanzar un error “Solo puedes agregar 3 elementos”.

Si no, quiero guardar esos elementos en la base de datos.

Quiero usar Java 8 streams en este caso.

Hasta ahora tengo este código:

public List<myobject> addMyObject(List<myobject> myObject) {
    if (playingStyle.isEmpty()) {
        throw new IllegalArgumentException("object cannot be null");
    }

    return myObject.stream()
        .limit(3)
        .map( ps -> {
            try {
                return repository.save(new MyObject(
                    ps.getName(), ps.getAverage(), ps.getPriority()
                ));
            } catch (Exception e) {
                log.warn("MyObject fields not correct {} {}", ps, e.getMessage());
                throw e;
            }
        })
        .collect(Collectors.toList());
}

He intentado usar .limit() pero lo que hace es tomar los primeros 3 objetos (si he enviado 4) y los guarda, se olvida del último.

Lo que intento lograr es si la lista está vacía, devolver un error, si el tamaño de la lista es mayor que 3, devolver un error, pero usando Java 8.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto utilizando Java 8, puedes modificar el código de la siguiente manera:

    public List<myobject> addMyObject(List<myobject> myObject) {
    
        // Comprobar si la lista es nula o vacía
        if (myObject == null || myObject.isEmpty()) {
            throw new IllegalArgumentException("La lista no puede ser nula o vacía");
        }
    
        // Comprobar si la lista contiene más de 3 elementos
        if (myObject.size() > 3) {
            throw new IllegalArgumentException("Solo puedes agregar 3 elementos");
        }
    
        // Guardar los elementos en la base de datos si se cumplen las condiciones
        return myObject.stream()
            .map(ps -> {
                try {
                    return repository.save(new MyObject(
                        ps.getName(), ps.getAverage(), ps.getPriority()));
                } catch (Exception e) {
                    log.warn("Campos de MyObject no son correctos {} {}", ps, e.getMessage());
                    throw e;
                }
            })
            .collect(Collectors.toList());
    }
    

    En este código modificado, primero comprobamos si la lista es nula o vacía. Si lo es, lanzamos una IllegalArgumentException con un mensaje apropiado. Si no lo es, comprobamos si el tamaño de la lista es mayor que 3. Si lo es, lanzamos la misma excepción con un mensaje diferente.

    Después de realizar las comprobaciones, utilizamos el método map del stream para guardar los elementos en la base de datos. Finalmente, utilizamos el método collect para recopilar los elementos guardados en una lista.

    Este código modificado debería cumplir tus requisitos de comprobar el tamaño de la lista y lanzar un error si supera 3, y utilizar Java 8 streams.

Comments are closed.