我需要用文件名对这个数组进行排序,每个项目来自不同的路径。
如何根据文件名对此数组进行排序。
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");
答案 0 :(得分:2)
你可以在Java 8中做这样的事情:
在这里,它将首先通过基于最后一个索引“/”对字符串进行子字符串来获取文件名。然后基于相同的排序。
<topic id="topic_1">
<title>Taking</title>
<body>
<p>
<image href="https://tneb.com"/>
</p>
</body>
<topic id="topic_2">
<title>Blood Pressure?</title>
<body>
<p>second.</p>
</body>
</topic>
</topic>
如果您不在Java 8上。
您可以像这样创建自定义Comparator,然后调用list.sort(Comparator
.comparing(s -> s.substring(s.lastIndexOf("/") + 1))
API。
Collections
然后按以下方式调用它:
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));
}
}
答案 1 :(得分:1)
这将仅按文件名排序,忽略父文件夹:
使用JAVA 8
select @fromDate as FromDate
,@toDate as ToDate
,c.Name as Client
,p.Name as Project
,@inTime as InTime
,@outTime as OutTime
,t.TotalTime
from Timelog t
left join Employee e
on e.id = t.EmployeeId
left join Project p
on p.Id = t.EmployeeProjectId
left join Client c
on c.Id = p.ClientId
使用JAVA&lt; 8 强>
sort.sort(Comparator.comparing(o -> new File(o).getName().toUpperCase()));
sort.forEach(System.out::println);
这将产生以下输出:
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);
}
答案 2 :(得分:0)
您可以使用Collection方法排序
Collections.sort(sort);
答案 3 :(得分:0)
试试这段代码:
Collections.sort(sort);