基于请求的不同属性和基于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中的请求的不同顺序排序(不是重复的)的主要内容,如果未能解决你的问题,请参考以下文章

基于请求命名空间解析 URL

JAVA中的Token

VUE04_Promise的概述常用API静态方法axios基于不同请求传参拦截器async/await用法

django-基于类的视图

带你一步步剖析Retrofit 源码解析:一款基于 OkHttp 实现的网络请求框架

跨域请求的常用方式及解释