网站首页 > java教程 正文
引言
今天工作需求中,有一个小需求,要按照某一个特定的顺序排列一个List。
举例:
原始的List 中存在3个String 元素
- 原始List : python,Java,C++
现在需要按照另一个顺序排序
- 要求List:C++ ,python,Java。
网上大部分的排序都是根据某一个值,比如int,long 等等进行比大小,很少能找到按照特定字符串的资料。传统的代码使用for循环等等也能解决这个问题,但是希望使用比较器的方式解决这个问题,今天就浅浅地研究一下。
原理
经过研究,最好的方式还是着眼于字符串的坐标值来解决这个问题,通过坐标值的比较来完成这个问题。
实践样例
1 准备实体类
/**
* @author fangzhou
* @date 2022/7/27 11:24 上午
*/
public class Right {
private String rightId;
public String getRightId() {
return rightId;
}
public void setRightId(String rightId) {
this.rightId = rightId;
}
}
2 解决方案
public static void main(String[] args) {
// rightListMe 原始要求的类
List<Right> rightListMe = new ArrayList<>();
Right right = new Right();
right.setRightId("rightId111");
Right right1 = new Right();
right1.setRightId("rightId222");
Right right2 = new Right();
right2.setRightId("rightId333");
rightListMe.add(right);
rightListMe.add(right1);
rightListMe.add(right2);
// rightListHe 特定顺序的类
List<String> rightListHe = new ArrayList<>();
rightListHe.add("rightId333");
rightListHe.add("rightId111");
rightListHe.add("rightId222");
// 核心比较器,通过该indexOf 找到下标
Collections.sort(rightListMe, new Comparator<Right>() {
@Override
public int compare(Right o1, Right o2) {
int index1 = rightListHe.indexOf(o1.getRightId());
int index2 = rightListHe.indexOf(o2.getRightId());
return (index1 == -1 || index2 == -1) ? (index2 - index1) : (index1 - index2);
}
});
for (Right s : rightListMe) {
System.out.println(s.getRightId());
}
3 输出结果
rightId333
rightId111
rightId222
可以看到代码原来是 rightId111,rightId222,rightId333的顺序,已经排序如上图所示了。
结尾
按照上述的方案就可以解决List 按照特定的字符串顺序排序list的问题,希望可以给大家一些启发,而且特别适用于针对按照某些特殊顺序去排列对应的数据,比如产品相关的一些适用场景,要推荐什么的。
作者介绍
- 某大厂高级软件工程师,代码爱好者
- 定期分享技术相关,热点实时,计算机实用技巧
- 有问题可在评论区回复或者联系我,用专业,程序员的思维带给你不一样的认知
欢迎点赞,关注博主,未来会有更多知识解答,有问题可以评论区讨论,尽全力帮大家解答。
猜你喜欢
- 2024-11-27 正确理解和使用JAVA中的字符串常量池
- 2024-11-27 面试Java岗 Integer和String必问知识点,你必须精通
- 2024-11-27 JAVA基础&String&StringBuffered&StringBuilder
- 2024-11-27 Java 17 I/O StringWriter 篇
- 2024-11-27 高端面试必备:一个Java对象占用多大内存?
- 2024-11-27 Java基础类String学习分析
- 2024-11-27 懵了!面试官问我:String 长度有限制吗?是多少?
- 2024-11-27 扒开外衣仔细分析:String为什么不可变
- 2024-11-27 对象的内存布局,怎样确定对象的大小
- 2024-11-27 「Java技术探索」带你进入String类的易错点和底层本质分析
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)