Comparador # comparando ordenar por el atributo del atributo de clase

novato:

Digamos que tengo una clase ClassA, y tiene ClassB como su atributo:

public ClassA
{
    private String attr;
    private ClassB classB;
}

public ClassB
{
    private String attr1;
    private int attr2;
}

De la clase anterior, es posible ordenar la lista de claseA List<ClassA> listpor atributos de ClassB usando Comparator? Puede ser ordenar por el atributo claseA fácilmente por el código Comparator.comparing(ClassA::getAttr), pero lo que si quiero ordenar la lista por el atributo en ClassB, por no decir el attr2atributo?

Ravindra Ranwala:

Puede hacerlo como tal,

List<ClassA> sortedList = list.stream()
    .sorted(Comparator.comparing(a -> a.getClassB().getAttr2()))
    .collect(Collectors.toList());

Pasar la comparación Functioncon el Comparatory se creará una nueva streamordenados de acuerdo a lo dado Comparator. Entonces recogerla en una List.

Si desea manejar valores nulos, se puede hacer, como a continuación.

final List<ClassA> sortedList = list.stream()
    .sorted(Comparator.nullsFirst(
        Comparator.comparing(a -> a.getClassB().getAttr1(), Comparator.nullsLast(String::compareTo))))
    .collect(Collectors.toList());

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=223327&siteId=1
Recomendado
Clasificación