加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读