El método subList en java.util.List nos hizo plantar un agujero y luego escribimos un método para llenar el agujero

Este es un problema encontrado en la línea de tiempo anterior. Proviene de un requisito de paginación del procesamiento por lotes. Los datos de la colección deben procesarse en lotes. Entonces, con el siguiente código, restauro la demostración producida:

public class SubListTest {
    public static void main(String[] args) {


//        List<String> srcList = Arrays.asList("a","b","c","d","e","f");
        List<String> srcList = new ArrayList<>();
        srcList.add("a");
        srcList.add("b");
        srcList.add("c");
        srcList.add("d");
        srcList.add("e");
        srcList.add("f");


        List<String> usedList = srcList.subList(1, 2);
        srcList.forEach(System.out::println);

        usedList.clear();

        srcList.forEach(System.out::println);

        //拿着usredList 做后续的操作....


    }
}

 En el código, después del procesamiento por lotes, cuando queremos usar srcList nuevamente, encontraremos que srcList ya es una colección vacía, lo que hará que nuestras operaciones posteriores fallen.

Además de los ejemplos que enumeré anteriormente, si realiza una operación add () en srcList, también se agregará a srcList.

¿Por qué pasó esto?

Veamos los comentarios del código fuente. SubList () devuelve una vista de la lista original. Las operaciones posteriores (estructurales) en la subcolección aún afectarán la colección original. Por lo tanto, la operación clear () sigue siendo srcList. ¡Finalmente srcList se convierte en una colección vacía!

Las operaciones estructurales (modificaciones estructurales) se refieren a operaciones que afectan el tamaño de la colección, como operaciones de agregar, eliminar y vaciar. Si está haciendo esto en la colección fuente, ¡ya no recomendamos que vuelva a usar la colección fuente! !

Para el manejo de problemas de paginación, también escribimos una clase de herramienta para llenar este agujero, y también es bueno usarla . Para obtener más detalles, consulte: Use java8 stream api para implementar la herramienta de adquisición de paginación de la colección de listas. Una vez finalizada la   operación de paginación, la lista de fuentes no se modifica.

Si crees que es valioso, puedes compartirlo y hacérselo saber a más personas.

 

Supongo que te gusta

Origin blog.csdn.net/kevin_mails/article/details/86524243
Recomendado
Clasificación