java - 如何按先数字字母后数字对字符串列表进行排序

标签 java collections

我有一个字符串列表,如下:

(2D, 1D, 1Y, 23M, 4M, 2Y, 12D)

如何按字母顺序然后按数字排序?

我期待

(1D, 2D, 12D, 4M, 23M, 1Y, 2Y)

我尝试过,但没有成功。

Collections.sort(myList, new MyComparator());

public class MyComparator implements Comparator {

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

        String s1 = (String)o1;
        String s2 = (String)o2;
        String strPart1 = s1.split("")[1];
        int intPart1 = Integer.parseInt(s1.split("")[0]);

        String strPart2 = s2.split("")[1];
        int intPart2 = Integer.parseInt(s2.split("")[0]);

        int strCompareResult = strPart1.compareTo(strPart2);
        if(0 == strCompareResult )
        {
            return intPart1 - intPart2;
        }
        else
        {
            return strCompareResult;
        }
    }

}

然而这并没有奏效。

最佳答案

您可以先按最后一个字符排序,然后将其他字符解析为 int。使用 Comparator.comparing.thenComparing 方法可以更轻松地编写 Comparator

myList.sort(Comparator.comparing((String s) -> s.charAt(s.length() - 1))
    .thenComparingInt(s -> Integer.parseInt(s.substring(0, s.length() - 1))));

关于java - 如何按先数字字母后数字对字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76721424/

相关文章:

java - 删除hibernate实体而不(尝试)删除关联表( View )条目

css - Rails 5 - 使用 item_wrapper_tag 在 simple_form 中设置集合样式

Java:将集合类型转换为子类型

java - 在流中存储新实例

java - 带有 JAX-RX 的 REST API 从 jsp 页面中的表单发送和接收已解析的 JSON

java - Richfaces tabPanel 中未呈现合成

c# - Linq 获取并置相等对象的集合

.net - 是否需要封装Collections?

java - 使用 Guava 从属性文件创建对象

java - Neo4j:无法实例化 BatchInserter