java求对象集合按照指定元素提供的顺序排序算法。
- 数据源
// 指定顺序
List<String> ids = Stream.of("3", "5", "1", "4", "2").collect(Collectors.toList());
// 待排序数据
List<User> users = Stream.of(new User().setId("1").setName("user1"),
new User().setId("2").setName("user2"), new User().setId("3").setName("user3"),
new User().setId("4").setName("user4"), new User().setId("5").setName("user5"),
new User().setId("6").setName("user6"), new User().setId("7").setName("user7"))
.collect(Collectors.toList());
class User {
private String id;
private String name;
}
- 目的
求算法,将待排序数据按照指定顺序排序,返回排序后的List<User>
(users里面的元素如果也在ids里面那就按ids里面的顺序来,其余的元素放到末尾且按自然顺序排)。
最终效果结构如下:
- users:
[
{
"id":"3",
"name":"user3"
},
{
"id":"5",
"name":"user5"
},
{
"id":"1",
"name":"user1"
},
{
"id":"4",
"name":"user4"
},
{
"id":"2",
"name":"user2"
},
{
"id":"6",
"name":"user6"
},
{
"id":"7",
"name":"user7"
}
]
参考了 java集合指定元素排序:最前,按照提供的顺序排序?求算法,但是还是没有特别好的解决方案,希望能提供个算法学习下~,提前感谢各位大佬。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
先按对应的数组下标排,找不到的(indexOf为-1)转为一个大于list容量上限的值
下标一致的按ID自然顺序排
自定义一个
Comparator
,需要特殊排序的特殊比较,否则默认比较,就完事了仔细想了下,这样可能符合你的要求
[Person(id=2, name=person2), Person(id=1, name=person1), Person(id=3, name=person), Person(id=4, name=person)]