java - Java 8 Streams,将一个元素放在列表的顶部,然后按名称的字母顺序排序
问题描述
我有一个项目列表(用户 ID)
List<String> userUid= Arrays.asList("uid1", "uid3", "uid5", "uid2", "uid4", "uid0");
如何将例如“uid2”放在列表顶部,然后对列表进行排序?因此,新列表将是:
uid2,uid0,uid1,uid3,uid4,uid5。
我试过没有成功userUid.sort(Comparator.comparing("uid2"::equals).reversed());
这样做的问题是它将在列表顶部显示旧列表的最后一个元素。
为了解释更多,我想制作一个用户列表,我想在这个列表的顶部显示登录的用户。然后按字母顺序对列表进行排序。
解决方案
您可以为此编写一个自定义比较器:
Comparator<String> comparator = (o1, o2) -> {
if (o1.equals("uid2")) return -1;
if (o2.equals("uid2"))return 1;
return o1.compareTo(o2);
};
Collections.sort(userUid,comparator);
或者你可以这样做:
List<String> res = userUid.stream().sorted()
.filter(u -> !u.equals("uid2"))
.collect(ArrayList::new,
(l, s) ->{if (l.isEmpty())l.add("uid2");l.add(s);},
List::addAll );
推荐阅读
- vue.js - 无法使用 FormData 发送请求(nuxt.js、vue.js、axios)
- java - 如何获取表单中的 UserID 以将其添加到表中?
- javascript - 请求路径包含未转义字符,在 Mocha/chai 测试中
- sql - 政府统计的 ER 图
- java - 未发送 Alfresco 工作流程通知电子邮件
- database - 在 Tableau 中将 PostgreSQL 嵌套 JSON 转换为数值数组
- ruby-on-rails - SSL证书getaddrinfo:名称或服务未知(SocketError)Rails-4.2.0
- swift - 访问对象内部的值
- android - Android dagger2,有些东西不清楚
- thorntail - thorntail 中的 projects_default.yml 文件