Clasificación de listas de Java 8

Tabla de contenido

1. El método básico de clasificación de listas

2. La lista está ordenada por un solo campo

3. La lista está ordenada por múltiples campos

4. La lista se ordena en orden inverso por campo

5. La lista se ordena por campo y se deduplica

6. La lista está ordenada y agrupada por campo

7. La lista se ordena por campo y cuenta el número

8. Resumen

En Java 8, podemos usar la expresión lambda y Stream API para ordenar List. Este artículo presentará en detalle cómo usar Java 8 para ordenar una Lista por un campo.

1. El método básico de clasificación de listas

Antes de Java 8, generalmente usamos el método Collections.sort() para ordenar List. Este método necesita pasar una Lista y un objeto Comparador para especificar la intercalación. Aquí hay un ejemplo:

List<Person> persons = new ArrayList<>();
// 添加元素
Comparator<Person> comparator = new Comparator<Person>() {
    @Override
    public int compare(Person o1, Person o2) {
        return o1.getName().compareTo(o2.getName());
    }
};
Collections.sort(persons, comparator);

El código anterior crea un tipo de Lista de personas y luego define un objeto Comparador para ordenar según el campo de nombre del objeto Persona. Finalmente llame al método Collections.sort() para ordenar la Lista.

En Java 8, podemos usar la expresión lambda y Stream API para simplificar el código anterior. Aquí hay un ejemplo usando expresiones lambda:

List<Person> persons = new ArrayList<>();
// 添加元素
persons.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));

El uso de expresiones lambda puede evitar la definición de objetos Comparator adicionales, lo que hace que el código sea más conciso.

2. La lista está ordenada por un solo campo

En Java 8, podemos ordenar una Lista usando el método sorted() de Stream API. Este método necesita pasar un objeto Comparator para especificar la intercalación. Aquí hay un ejemplo:

List<Person> persons = new ArrayList<>();
// 添加元素
List<Person> sortedList = persons.stream()
    .sorted(Comparator.comparing(Person::getName))
    .collect(Collectors.toList());

El código anterior crea un tipo de lista de personas y luego usa el método sorted() de Stream API para ordenar la lista. Este método usa el método Comparator.comparing() para crear un objeto Comparator para ordenar por el campo de nombre del objeto Person. Finalmente, use el método collect() para convertir el resultado ordenado en una Lista.

3. La lista está ordenada por múltiples campos

En el desarrollo real, a menudo necesitamos ordenar la Lista según varios campos. En Java 8, podemos usar el método sorted() de Stream API y el método thenComparing() de Comparator para implementar la clasificación de campos múltiples. Aquí hay un ejemplo:

List<Person> persons = new ArrayList<>();
// 添加元素
List<Person> sortedList = persons.stream()
    .sorted(Comparator.comparing(Person::getName)
        .thenComparing(Person::getAge))
    .collect(Collectors.toList());

El código anterior crea un tipo de lista de personas y luego usa el método sorted() de Stream API para ordenar la lista. Este método usa el método Comparator.comparing() para crear un objeto Comparator para ordenar por el campo de nombre del objeto Person. Luego se crea otro objeto Comparator usando el método thenComparing() para ordenar por el campo de edad de los objetos Person. Finalmente, use el método collect() para convertir el resultado ordenado en una Lista.

4. La lista se ordena en orden inverso por campo

En Java 8, podemos usar el método invertido() de Comparator para ordenar la Lista en orden inverso. Aquí hay un ejemplo:

List<Person> persons = new ArrayList<>();
// 添加元素
List<Person> sortedList = persons.stream()
    .sorted(Comparator.comparing(Person::getName).reversed())
    .collect(Collectors.toList());

El código anterior crea un tipo de lista de personas y luego usa el método sorted() de Stream API para ordenar la lista. Este método usa el método Comparator.comparing() para crear un objeto Comparator para ordenar según el campo de nombre del objeto Person, y usa el método reversed() para revertir los resultados ordenados. Finalmente, use el método collect() para convertir el resultado ordenado en una Lista.

5. La lista se ordena por campo y se deduplica

En Java 8, podemos usar el método distinto() de Stream API para deduplicar la Lista. Aquí hay un ejemplo:

List<Person> persons = new ArrayList<>();
// 添加元素
List<Person> sortedList = persons.stream()
    .sorted(Comparator.comparing(Person::getName))
    .distinct()
    .collect(Collectors.toList());

El código anterior crea un tipo de lista de personas y luego usa el método sorted() de Stream API para ordenar la lista. Este método usa el método Comparator.comparing() para crear un objeto Comparator para ordenar por el campo de nombre del objeto Person. Luego use el método distinto() para deduplicar los resultados ordenados. Finalmente, utilice el método collect() para convertir el resultado desduplicado en una Lista.

6. La lista está ordenada y agrupada por campo

En Java 8, podemos usar el método groupingBy() de Stream API para agrupar List. Aquí hay un ejemplo:

List<Person> persons = new ArrayList<>();
// 添加元素
Map<String, List<Person>> groupedMap = persons.stream()
    .sorted(Comparator.comparing(Person::getName))
    .collect(Collectors.groupingBy(Person::getName));

El código anterior crea un tipo de lista de personas y luego usa el método sorted() de Stream API para ordenar la lista. Este método usa el método Comparator.comparing() para crear un objeto Comparator para ordenar por el campo de nombre del objeto Person. Luego use el método groupingBy() para agrupar los resultados ordenados, y el valor de la clave de agrupación es el campo de nombre del objeto Person. Finalmente, guarde los resultados agrupados en un objeto Mapa.

7. La lista se ordena por campo y cuenta el número

En Java 8, podemos usar el método groupingBy() y el método counting() de Stream API para contar el número de List. Aquí hay un ejemplo:

List<Person> persons = new ArrayList<>();
// 添加元素
Map<String, Long> countMap = persons.stream()
    .sorted(Comparator.comparing(Person::getName))
    .collect(Collectors.groupingBy(Person::getName, Collectors.counting()));

El código anterior crea un tipo de lista de personas y luego usa el método sorted() de Stream API para ordenar la lista. Este método usa el método Comparator.comparing() para crear un objeto Comparator para ordenar por el campo de nombre del objeto Person. Luego use el método groupingBy() para agrupar los resultados ordenados, el valor clave del grupo es el campo de nombre del objeto Person y el método de conteo es el método de conteo(). Finalmente, guarde los resultados estadísticos en un objeto Mapa.

8. Resumen

Este artículo describe cómo ordenar una lista usando Java 8. Podemos usar expresiones lambda y Stream API para simplificar el código de clasificación y, al mismo tiempo, realizar funciones como clasificación de campos múltiples, clasificación inversa, deduplicación, agrupación y estadísticas. En el desarrollo real, podemos elegir un método de clasificación adecuado según las necesidades específicas para mejorar la legibilidad y la eficiencia del código.

Supongo que te gusta

Origin blog.csdn.net/jam_yin/article/details/130866489
Recomendado
Clasificación