private class FileType extends Object {
private String Name;
private String Type;
public FileType() {
Name = null;
Type = null;
}
public void setFileType(String n, String t) {
Name = n;
Type = t;
}
public int compareTo(FileType ft) {
String decodedFileName = null;
String decodedInputName = null;
try {
decodedFileName = URLDecoder.decode(this.Name, "UTF-8");
decodedInputName = URLDecoder.decode(ft.Name, "UTF-8");
}
catch(UnsupportedEncodingException e) {
}
return decodedFileName.compareToIgnoreCase(decodedInputName);
}
}
上面的代码是我的文件列表定义类
我实现了比较文件名
类型可以是Folder
或File
但我想排序文件优先级是Type,第二优先级是Name
怎么能到达它?
答案 0 :(得分:3)
您必须实现Comparable / compareTo方法。
答案 1 :(得分:2)
使用Comparator
的{{1}}界面与以多种方式排序......
使用比较器的java.util package
方法
的例如强>
以下是网站 http://www.mkyong.com
的示例compare(T t1, T t2)
答案 2 :(得分:2)
比较两种类型。如果比较与0不同,则返回结果。如果等于0,则比较名称。
请注意:
Comparable<FileType>
你永远不应该忽视你正在做的异常。顺便说一句,如果发生此异常,可能会导致NullPointerException。将异常包装到运行时异常中并抛出此运行时异常:
catch(UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
答案 3 :(得分:1)
if (this.Type.equals(ft.Type)){
return decodedFileName.compareTo(decodedInputName);
}
else{
return this.Type.compareTo(ft.Type);
}
答案 4 :(得分:1)
首先比较类型,然后比较解码后的名称。 我直接在类中缓存了decodeFileName值,以防止调用URLDecoder.decode太多。
private class FileType extends Object implements Comparable<FileType>{
private String name;
private String decodedFileName;
private String type;
public FileType(String n, String t) {
name = n;
try {
decodedFileName = URLDecoder.decode(this.name, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
type = t;
}
public int compareTo(FileType other) {
int result = type.compareToIgnoreCase(other.type);
if (result == 0){
result = decodedFileName.compareToIgnoreCase(other.decodedFileName);
}
return result;
}
}
答案 5 :(得分:1)
如果你只有两种类型,为什么不让它们枚举?
然后首先比较type.ordinal,如果有相同的比较名称,
并且还防止将不需要的值放在那里