使用对象
列表,其中其中一个项目具有空字符串
。尝试编写返回排序列表的方法。排序意味着列表的第一项值应始终为空String
。
由于我不想操作未排序的列表,因此我正在创建一个新列表进行排序。
到目前为止我的代码是:
private List<LoggerConfig> sort(List<LoggerConfig> unSortedList) {
List<LoggerConfig> sortedList = new ArrayList<LoggerConfig>(unSortedList);
//What to do here
return sortedList;
}
看了很多SO
帖子,但很困惑。
最佳答案
您可以信任 String.compareTo
来匹配您要查找的顺序。这是一个比较器:
new Comparator<LoggerConfig>() {
@Override
public int compare(LoggerConfig o1, LoggerConfig o2) {
return (o1.getName().compareTo(o2.getName()));
}
};
或直接在特定类(此处为Dummy)中实现Comparable
class Dummy implements Comparable<Dummy>{
String name;
public int compareTo(Dummy o) {
return this.name.compareTo(o.name);
}
}
原因:
String.compareTo
检查两者的第一个字符以查找差异(直到两者的最小长度),如果它们匹配,则使用长度进行差异,最长的将为在最短之后(shortest.compareTo(longuest)
将返回负值(长度差))。
在本例中,"".compareTo("abc")
,空字符串中没有字符,因此跳过第一次检查,并使用长度来比较 String
,因此空的 String
将始终被视为首先与任何“非空”String
前面的 Dummy
类的示例(只需添加构造函数 Dummy(String)
:
public class Main {
public static void main(String[] args) {
List<Dummy> dummies = new LinkedList<Dummy>();
dummies.add(new Dummy("abc.com.core"));
dummies.add(new Dummy(""));
dummies.add(new Dummy("abc.com.core.def"));
System.out.println("BEFORE : " + dummies);
Collections.sort(dummies);
System.out.println("AFTER : " + dummies);
}
}
输出:
BEFORE : [abc.com.core, , abc.com.core.def]
AFTER : [, abc.com.core, abc.com.core.def]
关于java - 返回排序后的 List<Object>,其中第一项值始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43893521/