基于多个字段对列表进行排序,每个字段可以在不同的方向上

时间:2018-02-06 18:02:22

标签: java spring sorting jpa guava

寻找对员工类列表进行排序

class Employee {

String name;
int age;
String dob;    
}

我希望对列表进行排序,如果名称等于年龄,如果年龄也相等,那么请检查dob。 所有这些都可以在不同的方向。例如

名称可以升序,年龄可以降序。

我在Rest Controller中使用的网址

orderBy=name,desc&orderBy=age,asc&&orderBy=dob,asc

我正在使用Pageable寻找Spring Data JPA。

但问题是数据库中的出生日期是字符串。

所以我需要将其转换为日期。

然后下一个选项我想到了在番石榴中订购。

Ordering<Employee> orderPrimary = Ordering.natural().onResultOf(new EmployeeOrderByName());

Ordering<Employee> orderSecondary = Ordering.natural().reverse().onResultOf(new EmployeeOrderByAge()); 
orderPrimary.compound(orderSecondary);

但是在Url字段中可以采用不同的顺序并且可以处于不同的方向,这里我不知道如何继续。

满足我要求的最佳方法。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用@Converter将dob字符串转换为/来自Date,然后在条件或查询中使用order by ....但是您需要进行一些试验和错误,因为转换器不起作用很好的查询(也很可能与Criteria一起)...... here is a tutorial on Converter