gpt4 book ai didi

java - 在 Java 中使用比较器自定义排序字母数字字符串

转载 作者:行者123 更新时间:2023-11-29 08:27:08 25 4
gpt4 key购买 nike

假设我有一个字符串列表 'ABC123''XXY111''EFG001' 等等。

我需要用两种方式对这些字符串进行排序,

1) First sorted by the numbers.
2) Then it sorted by the letters.

我尝试使用比较器对字符串进行排序。

首先,我拆分字符串并在开头添加数字,然后使用 Collections.sort() 对列表进行排序。

但我不确定如何以两种方式对它进行排序。

下面是我的代码,

  public class SortAlphaNumeric {   

static class MyComparator implements Comparator<String> {

@Override
public int compare(String o1, String o2) {

String oo1 = o1.substring(3) + o1.substring(0,3);
String oo2 = o2.substring(3) + o2.substring(0,3);

return oo1.compareTo(oo2);
}
}

public static void main(String[] args) {

String str1 = "ABC123";
String str2 = "ACB111";
String str3 = "XXX003";
String str4 = "XYZ001";
String str5 = "CDE123";
String str6 = "FEG111";


List<String> list = new ArrayList<String>();

list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
list.add(str5);
list.add(str6);

System.out.println("Before sorting");

Iterator<String> itr1 = list.iterator();

while(itr1.hasNext()) {
System.out.println(itr1.next());
}

SortAlphaNumeric.MyComparator myComp = new SortAlphaNumeric.MyComparator();

System.out.println("========================");

Collections.sort(list, myComp);

System.out.println("After 1st sorting");

Iterator<String> itr2 = list.iterator();

while(itr2.hasNext()) {
System.out.println(itr2.next());
}

Collections.sort(list, myComp);

System.out.println("After 2nd sorting");

Iterator<String> itr3 = list.iterator();

while(itr3.hasNext()) {
System.out.println(itr3.next());
}
}
}

最佳答案

您可以轻松组合两个比较器,将 0-3 索引比较链接到 3-6 索引比较。

以下是使用子字符串代替 split 的替代方法(进一步简化代码):

Comparator<String> myComp = Comparator.comparing((String s) -> s.substring(3))
.thenComparing(s -> s.substring(0, 3));

// resulting in:
// XYZ001, XXX003, ACB111, FEG111, ABC123, CDE123

假设文本具有这个标准长度,上面的代码消除了对 MyComparator 类的需要。

关于java - 在 Java 中使用比较器自定义排序字母数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51708817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com