NullsFirst () y nullsLast () en el comparador de java

Generalmente, podemos escribir el tipo de List <Map <XX, XX >> como este

Ordenar puntuación:

List<Map<String, Object>> resultlist = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("id", "1");
        map1.put("name", "张三");
        map1.put("Score", 86.5);
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("id", "2");
        map2.put("name", "李四");
        map2.put("Score", 90.0);
        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("id", "3");
        map3.put("name", "王五");
        map3.put("Score", 70.5);

        resultlist.add(map1);
        resultlist.add(map2);
        resultlist.add(map3);

 //升序        
resultlist.sort(Comparator.comparing((Map<String, Object> m) -> ((Double) m.get("Score")))); 

//降序
//resultlist.sort(Comparator.comparing((Map<String, Object> m) -> ((Double) m.get("Score"))).reversed()); 

Pero en este momento, si la puntuación de Wang Wu es nula, la operación de clasificación por nombre informará un error.
En este punto, puede usar nullsFirst () o nullsLast () para manejar nulos.

nullsFirst () :

Este método devuelve el comparador, que es una comparación nula, y considera que un valor nulo es menor que uno no nulo. Null es operado primero por la siguiente lógica:
1. El elemento nulo se considera menor que no nulo (es decir, el valor de nulo es menor que no nulo).
2. Cuando dos elementos están vacíos, se consideran iguales.
3. Cuando los dos elementos no están vacíos, el Comparador especificado determina el orden.
4. Si el comparador especificado es nulo, el comparador devuelto trata todos los elementos no nulos como iguales.
5. Si el comparador especificado es serializable, el comparador devuelto puede serializarse.

nullsLast () :

El método devuelve el comparador, que es una comparación nula, y considera un valor nulo mayor que el no nulo. Null es operado primero por la siguiente lógica:
1. El elemento nulo se considera mayor que no nulo.
2. Cuando dos elementos están vacíos, se consideran iguales.
3. Cuando los dos elementos no están vacíos, el Comparador especificado determina el orden.
4. Si el comparador especificado es nulo, el comparador devuelto trata todos los elementos no nulos como iguales.
5. Si el comparador especificado es serializable, el comparador devuelto puede serializarse.

Por lo tanto, la clasificación anterior se puede escribir así para evitar excepciones de puntero nulo:

//升序
resultlist.sort(Comparator.comparing((Map<String, Object> m) -> ((Double)m.get("Score")),Comparator.nullsLast(Comparator.naturalOrder())));

//降序
resultlist.sort(Comparator.comparing((Map<String, Object> m) -> ((Double)m.get("Score")),Comparator.nullsLast(Comparator.reverseOrder())));   

Supongo que te gusta

Origin blog.csdn.net/qq_33697094/article/details/108777551
Recomendado
Clasificación