基于请求的不同属性和基于java中的请求的不同顺序排序(不是重复的)
Posted
技术标签:
【中文标题】基于请求的不同属性和基于java中的请求的不同顺序排序(不是重复的)【英文标题】:Sorting by different attributes based on request and different order based on request in java (Not a Duplicate) 【发布时间】:2021-12-20 07:29:03 【问题描述】:存在一些关于按自定义对象的字符串变量排序的问题。我确实跟随他们并使用了比较器。但是,在我的自定义对象中有多个字符串和整数值,我想对具有不同属性的对象进行排序,无论请求什么。 我按照this 对属性进行了一项一项排序。
例如
public class CustomerObj()
Integer id;
String name;
String city;
Integer zipCode;
每次用户请求时,我只需要按其中一个属性进行排序。 除此之外,用户还将询问他们是否希望列表按升序或降序排序。 因此,例如,如果我要从 use 请求按 Id 和降序对其进行排序,我将无法传入比较器和 Collections.reverseOrder();
总结:我想根据请求的任何属性和请求的顺序按不同的属性(不是同时多个)进行排序。 示例 用户请求按 id 降序排序。 回复:
[
objid: 3,
objid: 2,
objid: 1
]
【问题讨论】:
为每个属性创建不同的方法,检查请求并根据属性调用方法。 【参考方案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]
【讨论】:
以上是关于基于请求的不同属性和基于java中的请求的不同顺序排序(不是重复的)的主要内容,如果未能解决你的问题,请参考以下文章
VUE04_Promise的概述常用API静态方法axios基于不同请求传参拦截器async/await用法