Java – how to sort conditions using the flow API
                                        
                    •
                    Java                                    
                I study stream API. I have this task I need to sort the list set according to their length order, and if several rows have the same length, sort them alphabetically
My code:
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);
I got this output:
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
When you see the lines
Sony Xperia Z5 ASUS Zenfone 3
And lines:
Meizu Pro 6 
    Heizu Pro 6
But my result must be:
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
How can I improve my code so that if the length is the same, the sorting is alphabetical?
How do we collect results in list >? List < pair < string, long > for example:
String a = Abcd; list.add(new Pair(a,a.length));
Solution
Add thenmatching() to the comparator chain to create an auxiliary sort order It will be applied when the primary sort is not enough:
phones.stream()
      .sorted(Comparator.comparingInt(String::length).reversed()
                        .thenComparing(Function.identity()))
      .forEach(System.out::println);
                
                            The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
                        
                                            
                        THE END
                    
                    
                    
                                                        二维码
                        
                        
                                                
                        