Java排序列表按字母顺序排列,最后一个值为“其他”

时间:2018-12-04 08:30:56

标签: java mysql sql spring-boot spring-data-jpa

我有一个小的Spring Boot应用程序,该应用程序管理一些项目和客户端。 客户有一个国家(是一个实体),当用户要创建/更新其客户以从UI中的预定义国家/地区选择列表中进行选择时,我想让该用户使用。 如果该国家/地区不在列表中,则用户应选择“其他”,直到管理员将添加新国家/地区。 唯一的问题是,该“其他”值必须始终位于选择列表的末尾,而其他国家/地区则应按字母顺序排序。如果按字母顺序对列表进行排序,则“ Other”值将位于中间位置。 如何才能有效地做到这一点(Java和DB)? 我现在正在使用JPA储存库findAll用于国家/地区。 第一个想法是为每个国家/地区添加一个索引,然后将“ Other”的值设置为较大值,因此我将按索引进行排序。但是,如果插入完成了...。我不知道如何更新其他值。

编辑: Jens Schauder解决方案成功了!

4 个答案:

答案 0 :(得分:3)

添加一个订购列,我现在称之为sortorder。默认情况下,将其填充为0,对于特殊的“其他”国家,则填充为999

然后按sortorder和国家/地区名称排序。

答案 1 :(得分:0)

  

Java方式

  • 从列表中删除“其他”(如果默认列表包含“其他”)
  • 根据需要对列表进行排序(如果从数据库中获取,则可以避免该列表 排序的订单)
  • 在列表末尾添加“其他”

假设它是一个基于字符串的简单数组列表

  

DB方式

Select countryname from countryTable order by  countryname union select  other from dual 

请注意,语法nd的方法会根据您选择的数据库而有所不同,但是抽象的想法仍然相同

答案 2 :(得分:0)

我建议您将isOther字段添加到您的属性/表中,并按两个字段/列isOther然后按name排序。

答案 3 :(得分:0)

您可以按排序的顺序从数据库中读取数据,并使用union其他添加到结果集中(如果表中还存在其他):

select * from country where name <> 'others' order by name 
union 
select * from country where name = 'others'

如果中没有其他人,则您想手动添加(在mysql中)

select * from country order by name
union
select 'others';

如果您使用的是java,为什么不假设最后以list的顺序从表中读取数据,最后只添加 others 到您的sorted中。

希望有帮助