Como classificar linhas com condição usando fluxo de API

Mefisto_Fell:

Eu estudo a API de fluxo, eu tenho essa tarefa. Eu preciso classificar a coleção Lista no fim do seu comprimento, se os comprimentos de várias linhas são as mesmas, então classificar-los em ordem alfabética.

Meu código:

List<String> phones = new ArrayList<String>();
    Collections.addAll(phones, "iPhone X", "Nokia 9", "Huawei Nexus 6P",
            "Samsung Galaxy S8", "LG G6", "Xiaomi MI6", "Sony Xperia Z5",
            "ASUS Zenfone 3", "Meizu Pro 6", "Heizu Pro 6",
            "Pixel 2");

phones.stream().sorted(Comparator.comparingInt(String::length).reversed()).forEach(System.out::println);

Eu tenho esse resultado:

Samsung Galaxy S8
Huawei Nexus 6P
Sony Xperia Z5
ASUS Zenfone 3
Meizu Pro 6 
Heizu Pro 6
Xiaomi MI6
iPhone X
Nokia 9
Pixel 2
LG G6

Como você vê as linhas

 Sony Xperia Z5
 ASUS Zenfone 3

E linhas:

    Meizu Pro 6 
    Heizu Pro 6

Mas o meu resultado tem que ser:

Samsung Galaxy S8
Huawei Nexus 6P
ASUS Zenfone 3
Sony Xperia Z5
Heizu Pro 6
Meizu Pro 6 
Xiaomi MI6
iPhone X
Nokia 9
Pixel 2
LG G6

Como posso melhorar o meu código para que, se os comprimentos são os mesmos, então a ordenação é alfabética?

Como podemos fazer resultados Recolher em List>? Onde List <Pair <String, Long>, por exemplo:

String a = Abcd;
list.add(new Pair(a, a.length));
Charles Dowbecki:

Adicione thenComparing()a sua cadeia de comparação para criar uma ordem de classificação secundária. Ele será aplicado quando tipo primário não é suficiente:

phones.stream()
      .sorted(Comparator.comparingInt(String::length).reversed()
                        .thenComparing(Function.identity()))
      .forEach(System.out::println);

Acho que você gosta

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