java - 基于请求的不同属性和基于java中的请求的不同顺序排序(不是重复的)
问题描述
关于按自定义对象的字符串变量排序存在一些问题。我确实跟随他们并使用了比较器。但是,在我的自定义对象中有多个字符串和整数值,我想对具有不同属性的对象进行排序,无论请求什么。我按照这个来对属性进行一一排序。
例如
public class CustomerObj(){
Integer id;
String name;
String city;
Integer zipCode;
}
每次用户请求时,我只需要按其中一个属性进行排序。除此之外,用户还将询问他们是否希望列表按升序或降序排序。因此,例如,如果我要从 use 请求按 Id 和降序对其进行排序,我将无法传入比较器和 Collections.reverseOrder();
摘要:我想根据请求的任何属性和请求的顺序按不同的属性(不是同时多个属性)进行排序。示例 用户请求按 id 降序排序。回复:
[
obj{id: 3},
obj{id: 2},
obj{id: 1}
]
解决方案
可以实现比较器的映射/列表/枚举,然后可以选择单个比较器,例如使用字符串名称:
static Map<String, Comparator<CustomObject>> comparators = Map.of(
"id", Comparator.comparingInt(CustomObject::getId),
"id desc", Comparator.<CustomObject>comparingInt(CustomObject::getId).reversed(),
"name", Comparator.comparing(CustomObject::getName),
"name desc", Comparator.comparing(CustomObject::getName, Comparator.reverseOrder()),
"city", Comparator.comparing(CustomObject::getCity),
"city desc", Comparator.comparing(CustomObject::getCity, Comparator.reverseOrder()),
"zip", Comparator.comparingInt(CustomObject::getZipCode),
"zip desc", Comparator.<CustomObject>comparingInt(CustomObject::getZipCode).reversed()
);
然后通过其别名获得适当的比较器:
List<CustomObject> data = Arrays.asList(
new CustomObject(1, "Jack", "London", 23456),
new CustomObject(9, "Buck", "Boston", 45678),
new CustomObject(5, "Kyle", "Jersey", 19876),
new CustomObject(7, "Stan", "Ashton", 36901)
);
System.out.println("raw list: " + data);
data.sort(comparators.get("id desc"));
System.out.println("id desc: " + data);
data.sort(comparators.get("name desc"));
System.out.println("name desc: " + data);
data.sort(comparators.get("zip"));
System.out.println("zip code: " + data);
输出:
raw list: [{id=1, name=Jack, city=London, zip=23456}, {id=9, name=Buck, city=Boston, zip=45678}, {id=5, name=Kyle, city=Jersey, zip=19876}, {id=7, name=Stan, city=Ashton, zip=36901}]
id desc: [{id=9, name=Buck, city=Boston, zip=45678}, {id=7, name=Stan, city=Ashton, zip=36901}, {id=5, name=Kyle, city=Jersey, zip=19876}, {id=1, name=Jack, city=London, zip=23456}]
name desc: [{id=7, name=Stan, city=Ashton, zip=36901}, {id=5, name=Kyle, city=Jersey, zip=19876}, {id=1, name=Jack, city=London, zip=23456}, {id=9, name=Buck, city=Boston, zip=45678}]
zip code: [{id=5, name=Kyle, city=Jersey, zip=19876}, {id=1, name=Jack, city=London, zip=23456}, {id=7, name=Stan, city=Ashton, zip=36901}, {id=9, name=Buck, city=Boston, zip=45678}]
推荐阅读
- python - 如何求解具有边界条件的微分方程,其中一个是使用python的不等式
- c - 为什么我的函数在有范围时会返回如此大的随机值?
- ios - 具有自定义单元格类的 UITableView 显示正确的行数但全部为空白
- html - 复选框链接 - 显示内联和向左浮动不起作用
- docker - 如何在 docker 容器和桌面之间获得 X11 套接字连接
- angular - Angular 7 DataTable:单击表格标题后没有可用数据
- r - 在闪亮中设置for循环
- jquery - 不稳定的滑块,为什么我的变量没有更新?
- asp.net - SQL Server 连接保持打开状态,即使在关闭后也是如此
- c++ - 将互斥锁与 shared_ptr 结合使用来保护跨副本共享的数据