您的位置 首页 java

JAVA集合自定义的顺序排序,这里有多种方案

背景

在工作中,有个统计列表数据。但数据本身没有排序的指标,导致有时返回前端的数据顺序不一致。后来为了解决问题,设定了一个固定的排序顺序,每次数据都进行排序。

概述

本文主要分享的几个部分。

  • 通过jdk 提供的接口实现排序。
  • 借助第三方工具实现排序

Java 排序

Comparator 简介

Comparator 接口中有个需要实现的函数。

比较其两个参数的顺序。当第一个参数小于,等于或大于第二个参数时,返回 负整数 ,零或正整数。按照一般情况返回1,0,-1,通过这三个值来区分正,负值。当然返回其他的正数, 负数一样可以排序。

1,0,-1的具体含义又怎样的呢?

1表示两个数位置交换,-1表示两个数位置不交换,0表示两个相同元素不排序,要是我们把等于返回为-1,那么两个相同的元素会交互顺序

通过Comparator 实现指定集合顺序

List orders = Stream.of(“东部”, “南部”, “西部”, “北部”, ” 中部 “).

collect(Collectors.toList());

List source = Stream.of(“北部”, “南部”, “西部”, “东部”, “中部”).

collect(Collectors.toList());

source.sort((o1, o2) -> {

if (orders.contains(o1) && orders.contains(o2)) {

if (orders.indexOf(o1) > orders.indexOf(o2)) {

return 1;

} else if (orders.indexOf(o1) == orders.indexOf(o2)) {

return 0;

} else {

return -1;

}

} else if (orders.contains(o1) && !orders.contains(o2)) {

return -1;

}

else if (!orders.contains(o1) && orders.contains(o2)) {

return 1;

}

return 0;

});

使用TreeMap实现排序

TreeMap中的元素默认按照keys的自然排序排列。

(对Integer来说,其自然排序就是数字的升序;对String来说,其自然排序就是按照字母表排序)

实现的原理,就是获取了字符在排序集合中的位置,然后借助TreeMap实现排序。

通过Google Guava 实现

依赖

<dependency>

<groupId>com.google.guava</groupId>

<artifactId>guava</artifactId>

<version>28.1-jre</version>

</dependency>

代码实现片段

Commons Collections 实现

依赖

< dependency >

< groupId >org. apache .commons</ groupId >

< artifactId >commons-collections4</ artifactId >

< version >4.3</ version >

</ dependency >

下面代码实例,实现指定顺序排序,且如果未识别的字符,放在最后

不仅只是指定顺序,还可以设置指定中少的字符 的排序。

总结

这四种方式,个人推荐最后一种方式,虽然也是使用的Comparator接口,但已经进行了封装。还可以实现未指定字符排序。

当然如果你的项目中已经引入了Guava,可以自行实现,代码量也不大。

前面两种解决方式,实际过程中,需要考虑多种逻辑情况,相对比较复杂。

头条代码块出现了些问题,有需要的可以留言。

文章来源:智云一二三科技

文章标题:JAVA集合自定义的顺序排序,这里有多种方案

文章地址:https://www.zhihuclub.com/195370.shtml

关于作者: 智云科技

热门文章

网站地图