mirror of
https://github.com/zfile-dev/zfile.git
synced 2025-04-19 05:34:52 +00:00
48 lines
1.2 KiB
Java
48 lines
1.2 KiB
Java
package im.zhaojun.common.util;
|
|
|
|
import im.zhaojun.common.enums.FileTypeEnum;
|
|
import im.zhaojun.common.model.FileItem;
|
|
|
|
import java.util.Comparator;
|
|
|
|
/**
|
|
* 文件比较器
|
|
*
|
|
* - 文件夹始终比文件排序高
|
|
* - 默认按照名称排序
|
|
* - 默认排序为升序
|
|
* - 按名称排序不区分大小写
|
|
*/
|
|
public class FileComparator implements Comparator<FileItem> {
|
|
|
|
private String sortBy;
|
|
private String order;
|
|
|
|
public FileComparator(String sortBy, String order) {
|
|
this.sortBy = sortBy;
|
|
this.order = order;
|
|
}
|
|
|
|
@Override
|
|
public int compare(FileItem o1, FileItem o2) {
|
|
FileTypeEnum o1Type = o1.getType();
|
|
FileTypeEnum o2Type = o2.getType();
|
|
|
|
if (o1Type.equals(o2Type)) {
|
|
int result;
|
|
switch (sortBy) {
|
|
case "time": result = o1.getTime().compareTo(o2.getTime()); break;
|
|
case "size": result = o1.getSize().compareTo(o2.getSize()); break;
|
|
default: result = o1.getName().compareToIgnoreCase(o2.getName());
|
|
}
|
|
return "asc".equals(order) ? result : -result;
|
|
}
|
|
|
|
if (o1Type.equals(FileTypeEnum.FOLDER)) {
|
|
return -1;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
}
|