- 数据源
// 指定顺序
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集合指定元素排序:最前,按照提供的顺序排序?求算法,但是还是没有特别好的解决方案,希望能提供个算法学习下~,提前感谢各位大佬。
先按对应的数组下标排,找不到的(indexOf为-1)转为一个大于list容量上限的值
下标一致的按ID自然顺序排