java - 对 String 的 ArrayList 进行排序,其中 String 包含 java 中的数值

标签 java

代码如下

public static void main(String[] args) {
    ArrayList<String> arrayList=new ArrayList<String>();
    arrayList.add("1001");
    arrayList.add("999");

    String val="";
    boolean unsorted=true;

     if (val.contains("isAscending")) {

            for (int i = 0; i < arrayList.size() - 1; i++) {
                if (arrayList.get(i).toLowerCase().compareTo(arrayList.get(i + 1).toLowerCase()) <= 0) {
                    unsorted = false;
                    System.out.println(unsorted);
                } else {
                    break;
                }
            }

        } else {

            for (int i = 0; i < arrayList.size() - 1; i++) {
                if (arrayList.get(i).toLowerCase().compareTo(arrayList.get(i + 1).toLowerCase()) >= 0) {
                    unsorted = false;
                    System.out.println(unsorted+" "+"descending");
                } else {
                    break;
                }
            }
        }

}

上面的程序工作正常,但问题是当我替换时 带有以下数组列表的数组列表不起作用

arrayList.add("22");
arrayList.add("8");

我的意思是说,如果第一个索引后面跟着一个 1 位数字,则会失败

这里重复同样的内容

arrayList.add("1001");
arrayList.add("1000");

对于这个,上面的代码有效

arrayList.add("1001");
arrayList.add("999");

为此它失败了

需求是验证数组列表是否按顺序排列,不需要对数组列表进行排序

最佳答案

如果您想了解您的列表是否已排序,您可以使用自定义比较器使用字符串表示的实际整数对 ArrayList 进行排序。然后,您可以将此排序列表与原始列表进行比较。

Collections.sort(arrayList, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        try {
            // try to compare the two values as integers, if possible
            Integer val1 = Integer.valueOf(s1);
            Integer val2 = Integer.valueOf(s2);
            return val1.compareTo(val2);
        }
        catch (NumberFormatException e) {
            // fall back to sort them as strings
            return s1.compareTo(s2);
        }
    }
});

正如 @ajb 提到的,假设每个字符串都可以转换为整数,并在其他地方处理异常可能会更简单。在这种情况下我们可以使用:

Collections.sort(arrayList, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return Integer.valueOf(s1).compareTo(Integer.valueOf(s2));
    }
});

关于java - 对 String 的 ArrayList 进行排序,其中 String 包含 java 中的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40254771/

相关文章:

java - 修复丢失的@XmlRootElement 问题后类名错误

java - 如何从 SharedPreferences 中检索数据列表

java - 拥有方与非拥有方在 hibernate 中及其在元素映射引用中的用法?

java - Opencv 使用套接字将 mat 从 java 发送到 python

java - Android如何加载新布局

Java user.home 被设置为 %userprofile% 并且没有被解析

java - 在 java 代码中,从 java.util.List 获取 scala.Iterable

java - 如何创建一个搜索方法来搜索与所有其他条目名称完全匹配的名称

java - 分别为多个war文件在tomcat中配置java代理

java - 如何从java中的try catch函数返回一个值?