实际上我想对Array List of objects进行排序。我为此目的使用Comparable接口。它完全正常工作但问题是,当我进行排序时,就是给出了这两个问题。
所有拥有首字母大写字母的名字都汇集在一起,所有名字第一字母小的名字都在底部聚集在一起。
所有排序后的大写字母单词汇总后,所有小写字母一起排在最底层。
这是我的豆
MyShares.java
public class Myshares implements Comparable<Myshares> {
int id, parent;
String name, path, type, shared_with, shared_or_not, upload_request;
public int getParent() {
return parent;
}
public void setParent(int parent) {
this.parent = parent;
}
public String getUpload_request() {
return upload_request;
}
public void setUpload_request(String upload_request) {
this.upload_request = upload_request;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getShared_with() {
return shared_with;
}
public void setShared_with(String shared_with) {
this.shared_with = shared_with;
}
public String getShared_or_not() {
return shared_or_not;
}
public void setShared_or_not(String shared_or_not) {
this.shared_or_not = shared_or_not;
}
@Override
public int compareTo(Myshares another) {
return this.name.compareTo(another.getName());
}
}
这是输出
我认为它基于ASCII码。我想要一个完整的排序列表。请看一下。
答案 0 :(得分:6)
如果您希望不区分大小写,我建议您更改compareTo()
方法,而不是使用compareToIgnoreCase()
的{{1}}方法 - 即:
String
答案 1 :(得分:5)
更改
@Override
public int compareTo(Myshares another) {
return this.name.compareTo(another.getName());
}
到
@Override
public int compareTo(Myshares another) {
return String.CASE_INSENSITIVE_ORDER.compare(this.name, another.getName());
}
或使用nullPainter发布的更具可读性且非常好的解决方案。
答案 2 :(得分:2)
您应该调整compareTo()
方法
return this.name.toLowerCase().compareTo(another.getName().toLowerCase());
答案 3 :(得分:2)
将compareTo方法替换为:
public int compareTo(Myshares another) {
return this.name.compareToIgnoreCase(another.getName());
}
答案 4 :(得分:2)
我给了你一个我编写的现有比较器的源代码,该比较器执行完整的Alpha数字排序,并且可以使用10,1等等名称中的数字
要使用它,你可以这样做:Collections.sort(myList,comparator);
替代方法也可以在您的比较方法中将双面小写。但是,只要你有数字或符号,它就会被抛弃,所以我个人会使用比较器。
使用以下源代码检查GIST:https://gist.github.com/gondor/9328de5fa0cce130bc3b