java - 使用完全自定义的多个规则对字符串列表进行排序
问题描述
我有一个这样的字符串列表:[8****, 7****, 73***, ****1, **101, *4101, 12010 etc]
我想用以下两条规则进行排序。
- 第一条规则:仅使用最后一个数字/星号,排序应该是:首先是星号,然后是数字 1-9,然后是 0。
- 第二条规则:使用倒数第二个字符排序应该是:首先是星号,然后是数字 0-9。
所以最终的数组应该变成:[7****, 8****, 73***, 320**, ****1, **101, 12101]
我创建了一个自定义比较器,并单独获取每个字符:
public class MyCustomComparator implements Comparator<ObjToCompare> {
@Override
public int compare(ObjToCompare o1, ObjToCompare o2) {
String lastSubstr1 = o1.getMyString.substring(o1.getMyString.length()-1);
String lastSubstr2 = o2.getMyString.substring(o2.getMyString.length()-1);
String secondFromLastSubstr1 =o1.getMyString.substring(o1.getMyString.length()-2,o1.getMyString().length()-1);
String secondFromLastSubstr2 =o2.getMyString.substring(o2.getMyString.length()-2,o2.getMyString().length()-1);
String thirdFromLastSubstr1 = o1.getMyString.substring(o1.getMyString.length()-3,o1.getMyString().length()-2);
String thirdFromLastSubstr2 = o2.getMyString.substring(o2.getMyString.length()-3,o2.getMyString().length()-2);
String fourthFromLastSubstr1 = o1.getMyString.substring(o1.getMyString.length()-4,o1.getMyString().length()-3);
String fourthFromLastSubstr2 = o2.getMyString.substring(o2.getMyString.length()-4,o2.getMyString().length()-3);
String fifthFromLastSubstr1 = o1.getMyString.substring(o1.getMyString.length()-5,o1.getMyString().length()-4);
String fifthFromLastSubstr2 = o2.getMyString.substring(o2.getMyString.length()-5,o2.getMyString().length()-4);
int last = lastSubstr1.compareTo(lastSubstr2);
return lastSubstr1.compareTo(lastSubstr2);
}}
如何实现上述逻辑?非常感谢您提前。
解决方案
我会这样做:创建两个String
s (用于两个规则)。每个String
按规则设置的顺序保存字符。例如:
String rule1Order = "*1234567890";
现在字符串中字符的索引可以看作是数字顺序值。索引之间的差异是期望的compareTo
结果:
int lastSubstr1Ordervalue = rule1Order.indexOf(lastSubstr1);
int lastSubstr2Ordervalue = rule1Order.indexOf(lastSubstr2);
int lastSubstrCompareTo = lastSubstr1Ordervalue - lastSubstr2Ordervalue;
推荐阅读
- android - 如何在一个视图中显示具有不同图像高度和宽度的多个图像?
- go - 我应该为日历 API 重用服务,还是按需创建新服务是否安全?
- aspnetboilerplate - 具有多个数据库的多租户(在前一个异步操作完成之前在此上下文上启动了第二个操作)
- php - 图像不显示,如何解决?
- php - 当我使用 3D Secure 测试卡号时,为什么 Stripe 没有给我 Payment Intents requires_action 状态?
- java - 如何从 Firestore 中检索我的 Geopoint 对象
- python - 用 sys.stdout 保存输出,但我想在控制台/终端上显示它
- android - Android Studio - 无法调试应用程序
- appcelerator - 在 WebView 中显示 PDF 文件不起作用 - Titanium
- c# - 在调用 Query 之前在 EntityFramework 上下文中执行 SET 语句