java – 如何使用流API对条件进行排序
发布时间:2020-12-15 08:28:35 所属栏目:Java 来源:网络整理
导读:我研究流API,我有这个任务.我需要按照它们的长度顺序对List集合进行排序,如果几行的长度相同,则按字母顺序对它们进行排序. 我的代码: ListString phones = new ArrayListString(); Collections.addAll(phones,"iPhone X","Nokia 9","Huawei Nexus 6P","Sams
我研究流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)); 解决方法
将
thenComparing() 添加到比较器链以创建辅助排序顺序.它将在主要排序不够时应用:
phones.stream() .sorted(Comparator.comparingInt(String::length).reversed() .thenComparing(Function.identity())) .forEach(System.out::println); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |