【发布时间】:2018-11-12 03:59:34
【问题描述】:
我想根据用户的状态对用户列表进行排序,但顺序必须基于我设置的顺序。
我要设置列表的顺序,
顺序应该是1、0、5。我们还应该记住订购用户名。
List<User> users = new ArrayList();
users.add(new User("A", 1));
users.add(new User("B", 5));
users.add(new User("C", 0));
users.add(new User("D", 1));
users.add(new User("E", 5));
users.add(new User("F", 0));
这是用户类
public class User {
private String username;
private Integer status;
}
应该是这样的
[
{
"username": "A",
"status": 1
},
{
"username": "D",
"status": 1
},
{
"username": "C",
"status": 0
},
{
"username": "F",
"status": 0
},
{
"username": "B",
"status": 5
},
{
"username": "E",
"status": 5
}
]
我不确定是否可以使用 Comparator.comparing,因为这个既不是升序也不是降序。
【问题讨论】:
-
是的,
Comparator可以处理,它只需要根据提供的两个值的比较返回+1/-1/0。最好的办法就是试一试 -
如果 1,0,5 是唯一的状态编号,那么您可以使用比较器轻松排序。
-
减1,然后平方。 1,0,5 -> 0, 1, 16 ... 很容易排序
-
@KennethC
Compator仅根据比较结果和您希望对值进行排序的顺序返回负数、正数或零值 -
@KennethC 查看
Comparator.compare的文档,了解不同返回值的含义(负数表示小于,零表示等于,正数表示大于)。
标签: java sorting java-8 comparator