Implementar funciones de paginación, búsqueda difusa y filtrado de columnas a través de transmisiones

Implementar funciones de paginación, búsqueda difusa y filtrado de columnas a través de transmisiones

fondo

Después de consultar algunos datos a través de la base de datos, deben pasar por un cierto procesamiento lógico antes de que puedan mostrarse en el front-end. En este momento, el programa debe realizar la paginación correspondiente, la búsqueda difusa y el filtrado de columnas. Estas funciones pueden resultar engorrosas de procesar mediante lógica ordinaria, pero el procesamiento a través de flujos será mucho más sencillo.

pantalla lógica

Esta es una plantilla escrita. Creo que también se puede escribir como un proceso general basado en esto. Si se usa nuevamente, la agregaré más tarde
Insertar descripción de la imagen aquí
Explicación del código< /span> Debido a que el tamaño cambiará después de completar el filtrado, el total se restablece El filtrado por columna es similar al difuso búsqueda, pero lo que se pasa es un mapa<k, v>, k es el nombre del campo y v es el contenido de la búsqueda difusa. Luego repita este mapa. Si puede coincidir con el valor del objeto en el filtro, consérvelo; si no puede coincidir, deséchelo. Finalmente devuelve esta lista 5: Filtrado por columna, aquí también a través de la función de filtro, el código se procesa de la siguiente manera: ④: Esto puede admitir la búsqueda difusa de dos campos, use filtro combinado con | | operación para obtener Resultado ③: Búsqueda difusa, obtiene el valor de búsqueda difusa pasado desde el front-end ②: Establecer paginación El número total, este valor suele ser utilizado por la interfaz.
①: Reconstruya la lista que ha completado el procesamiento de datos en una nueva lista. Por supuesto, las referencias de datos en ella son las mismas, pero la nueva lista se puede agregar, eliminar o modificar




Insertar descripción de la imagen aquí

⑥: Ordenar, la ordenación también se puede realizar mediante ordenación por columnas, use el método ordenado, el parámetro necesita un tipo de comparador, el método personalizado sortBy() se genera de la siguiente manera:
Insertar descripción de la imagen aquí
Para ordenar los campos, hay clasificación por cadena, numérica y predeterminada, método de clasificación desc o asc, etc. Si desea agregar clases de tiempo u otros tipos, debe implementar manualmente la interfaz del comparador para construir el método de comparación.

⑦Paginación: la paginación utiliza las funciones de omitir y limitar para implementar la página actual y el número que se muestra en cada página, lo cual es relativamente simple
⑧Guardar y devolver los resultados

Código de muestra

public class Person {
    
    
    private String name;
    private int age;
    private String city;

    // 构造函数、getter和setter方法
}
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class PersonStreamExample {
    
    

    public static void main(String[] args) {
    
    
        List<Person> persons = getSampleData(); // 获取示例数据

        // 分页
        int pageSize = 10;
        int pageNumber = 1;
        List<Person> page = persons.stream()
                .skip((pageNumber - 1) * pageSize)
                .limit(pageSize)
                .collect(Collectors.toList());

        // 按列过滤
        String filterColumn = "city";
        String filterValue = "New York";
        List<Person> filtered = persons.stream()
                .filter(person -> filterColumn.equals("name") && person.getName().contains(filterValue))
                .filter(person -> filterColumn.equals("age") && person.getAge() >= Integer.parseInt(filterValue))
                .filter(person -> filterColumn.equals("city") && person.getCity().equals(filterValue))
                .collect(Collectors.toList());

        // 模糊搜索
        String keyword = "John";
        List<Person> searchResults = persons.stream()
                .filter(person -> person.getName().contains(keyword) || person.getCity().contains(keyword))
                .collect(Collectors.toList());

        // 按列排序
        String sortColumn = "age";
        List<Person> sorted = persons.stream()
                .sorted(Comparator.comparingInt(person -> {
    
    
                    if (sortColumn.equals("name")) {
    
    
                        return person.getName().hashCode();
                    } else if (sortColumn.equals("age")) {
    
    
                        return person.getAge();
                    } else if (sortColumn.equals("city")) {
    
    
                        return person.getCity().hashCode();
                    } else {
    
    
                        return 0;
                    }
                }))
                .collect(Collectors.toList());
    }

    // 获取示例数据
    private static List<Person> getSampleData() {
    
    
        // 创建和返回示例数据的逻辑
    }
}

Se utilizará más adelante y se complementará el contenido extraído como método general.

Supongo que te gusta

Origin blog.csdn.net/qq_40454136/article/details/132887563
Recomendado
Clasificación