Я изучаю потоковый API, у меня есть эта задача. Мне нужно отсортировать коллекцию List в порядке их длины, если длины нескольких строк одинаковы, то сортировать их по алфавиту.
Мой код:
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);
Я получил этот вывод:
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
Как вы видите линии
Sony Xperia Z5
ASUS Zenfone 3
И строки:
Meizu Pro 6
Heizu Pro 6
Но мой результат должен быть:
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
Как я могу улучшить свой код, чтобы при одинаковой длине сортировка осуществлялась по алфавиту?
Как мы можем собирать результаты в Списке>? Где List <Pair <String, Long>
например:
String a = Abcd;
list.add(new Pair(a, a.length));