【问题标题】:Sort Arraylist contains file path排序 Arraylist 包含文件路径
【发布时间】:2017-07-30 09:23:48
【问题描述】:

我需要用文件名对这个数组进行排序,每个项目都来自不同的路径。

如何根据文件名对这个数组进行排序。

ArrayList<String> sort = new ArrayList<>();

        sort.add("/etc/fest/gerts.png");
        sort.add("/etc/fest/ase.png");
        sort.add("/etc/test/zer.png");
        sort.add("/etc/fest/dse.png");

【问题讨论】:

    标签: java android arrays sorting arraylist


    【解决方案1】:

    你可以在 Java 8 中做这样的事情:

    在这里,它将首先通过根据“/”的最后一个索引对字符串进行子串化来获取文件名。然后根据相同的排序。

    list.sort(Comparator
        .comparing(s -> s.substring(s.lastIndexOf("/") + 1))
    

    如果您不在 Java 8 上。 您可以像这样创建自定义比较器,然后调用Collections API。

    public class SubstringComparator implements Comparator {
      public int compare(Object o1, Object o2) {
        String s1 = o1.tostring().substring(o1.tostring().lastIndexOf("/") + 1);
        String s2 = o2.tostring().substring(o2.tostring().lastIndexOf("/") + 1);
        return s1.compareTo(s2);
        // or, more concisely:
        // return o1.toString().substring(1).equals(o2.toString().substring(1));
      }
    }
    

    然后调用如下:

    SubstringComparator comparator = new SubstringComparator();
    Collections.sort(list, comparator );
    

    【讨论】:

    • 请采纳答案,如果有用也可以投票
    【解决方案2】:

    这将仅按文件名排序,忽略父文件夹:

    使用 JAVA 8

    sort.sort(Comparator.comparing(o -> new File(o).getName().toUpperCase()));
    sort.forEach(System.out::println);
    

    使用 JAVA

    sort.sort(new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return new File(o1).getName().toUpperCase().compareTo(new File(o2).getName().toUpperCase());
        }
    });
    for (String s : sort) {
        System.out.println(s);
    }
    

    这将产生以下输出:

    /etc/fest/ase.png
    /etc/fest/dse.png
    /etc/fest/gerts.png
    /etc/test/zer.png
    

    【讨论】:

      【解决方案3】:

      试试这个代码:

      Collections.sort(sort);
      

      【讨论】:

      • 这不会仅按文件名排序,它还会考虑父文件夹,这是 op 没有要求的。
      【解决方案4】:

      可以使用Collection方法排序

      Collections.sort(sort);
      

      【讨论】:

      • 这不会仅按文件名排序,它还会考虑父文件夹,这是 op 没有要求的。
      猜你喜欢
      • 1970-01-01
      • 2014-10-21
      • 2021-07-11
      • 2012-08-04
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      相关资源
      最近更新 更多