Java 返回已排序的列表<;对象>;其中第一项值始终为空
使用Java 返回已排序的列表<;对象>;其中第一项值始终为空,java,linked-list,Java,Linked List,使用对象列表,其中一个项具有空字符串。尝试编写将返回排序列表的方法。排序意味着列表的第一项值应始终为空字符串 因为我不想操纵未排序的列表,所以我正在创建一个新的列表进行排序 到目前为止,我的代码是: private List<LoggerConfig> sort(List<LoggerConfig> unSortedList) { List<LoggerConfig> sortedList = new ArrayList<LoggerCo
对象列表
,其中一个项具有空字符串
。尝试编写将返回排序列表的方法。排序意味着列表的第一项值应始终为空字符串
因为我不想操纵未排序的列表,所以我正在创建一个新的列表进行排序
到目前为止,我的代码是:
private List<LoggerConfig> sort(List<LoggerConfig> unSortedList) {
List<LoggerConfig> sortedList = new ArrayList<LoggerConfig>(unSortedList);
//What to do here
return sortedList;
}
私有列表排序(列表未排序列表){
List sortedList=新数组列表(未排序列表);
//在这里做什么
返回分类列表;
}
看了很多的帖子,但是很困惑 您可以将此条件放在比较器中,以便将具有空值的元素视为比其他元素“少”,以便它显示在排序列表的开头。试着这样做:
Collections.sort(sortedList, new Comparator<LoggerConfig>() {
@Override
public int compare(LoggerConfig o1, LoggerConfig o2) {
if(o1.getName().isEmpty(){
return -1;
}
if(o2.getName().isEmpty(){
return 1;
}
return (o1.getName().compareTo(o2.getName()));
}
});
Collections.sort(sortedList,new Comparator(){
@凌驾
公共int比较(LoggerConfig o1,LoggerConfig o2){
if(o1.getName().isEmpty()的值){
返回-1;
}
if(o2.getName().isEmpty()){
返回1;
}
返回(o1.getName().compareTo(o2.getName());
}
});
我没有对此进行测试,但这应该让想法更清楚。如果列表末尾显示空元素,请将-1
和1
互换
如果您的列表很大,并且排序需要很多时间,那么最好在排序之前删除空元素,然后进行排序,然后将元素放在开头。您可以将此条件放在比较器中,以便将具有空值的元素视为“较少”而不是其他元素,因此它会显示在排序列表的开头。请尝试以下操作:
Collections.sort(sortedList, new Comparator<LoggerConfig>() {
@Override
public int compare(LoggerConfig o1, LoggerConfig o2) {
if(o1.getName().isEmpty(){
return -1;
}
if(o2.getName().isEmpty(){
return 1;
}
return (o1.getName().compareTo(o2.getName()));
}
});
Collections.sort(sortedList,new Comparator(){
@凌驾
公共int比较(LoggerConfig o1,LoggerConfig o2){
if(o1.getName().isEmpty()的值){
返回-1;
}
if(o2.getName().isEmpty()){
返回1;
}
返回(o1.getName().compareTo(o2.getName());
}
});
我没有对此进行测试,但这应该让想法更清楚。如果列表末尾显示空元素,请将-1
和1
互换
如果您的列表很大,并且排序需要很多时间,那么最好在排序之前删除空元素,然后进行排序,然后将元素放在开头。比较器解决方案对我来说似乎是可行的;您缺少的是实现compare
方法,这样它就可以满足您的需要
Collections.sort(sortedList, new Comparator<LoggerConfig>() {
@Override
public int compare(LoggerConfig o1, LoggerConfig o2) {
if(o1.getName().equals("")){
return -1;
} else if(o2.getName().equals("")) {
return 1;
} else {
return (o1.getName().compareTo(o2.getName()));
}
}
});
Collections.sort(sortedList,new Comparator(){
@凌驾
公共int比较(LoggerConfig o1,LoggerConfig o2){
if(o1.getName().equals(“”){
返回-1;
}else if(o2.getName().equals(“”){
返回1;
}否则{
返回(o1.getName().compareTo(o2.getName());
}
}
});
根据,比较器有一个compare
方法,该方法返回一个
- 如果第一个参数小于第二个参数,则小于0
- 如果参数相等,则为0
- 如果第一个参数大于第二个参数,则大于0
因此,如果两个字符串都不同于”
,则所需的比较器应返回两个字符串的比较,如果第一个字符串(或第二个字符串)不同,则返回-1(或1)字符串为空。比较器的解决方案对我来说似乎是可行的;您缺少的是实现compare
方法,以便它可以执行您想要的操作
Collections.sort(sortedList, new Comparator<LoggerConfig>() {
@Override
public int compare(LoggerConfig o1, LoggerConfig o2) {
if(o1.getName().equals("")){
return -1;
} else if(o2.getName().equals("")) {
return 1;
} else {
return (o1.getName().compareTo(o2.getName()));
}
}
});
Collections.sort(sortedList,new Comparator(){
@凌驾
公共int比较(LoggerConfig o1,LoggerConfig o2){
if(o1.getName().equals(“”){
返回-1;
}else if(o2.getName().equals(“”){
返回1;
}否则{
返回(o1.getName().compareTo(o2.getName());
}
}
});
根据,比较器有一个compare
方法,该方法返回一个
- 如果第一个参数小于第二个参数,则小于0
- 如果参数相等,则为0
- 如果第一个参数大于第二个参数,则大于0
因此,如果两个字符串都不同于”
,则所需的比较器应返回两个字符串的比较,如果第一个(或第二个)字符串为空,则返回-1(或1)。您可以信任字符串。compareTo
以匹配您所寻求的顺序。这是一个比较器:
new Comparator<LoggerConfig>() {
@Override
public int compare(LoggerConfig o1, LoggerConfig o2) {
return (o1.getName().compareTo(o2.getName()));
}
};
原因:
字符串.compareTo
检查两者的前几个字符以找出差异(直到两者的最小长度),如果它们匹配,则使用长度来产生差异,最长的将在最短的后面(shortest.compareTo(longuest)
将返回负值(长度差异))
在这种情况下,”。与(“abc”)
相比,空字符串中没有字符,因此跳过第一次检查,并使用长度来比较字符串
s,因此空字符串
将始终被视为与任何“非空”字符串
s的第一次比较
前面的Dummy
类的示例(只需添加构造函数Dummy(String)
:
您可以信任字符串。compareTo
来匹配您寻求的顺序。下面是一个比较器:
new Comparator<LoggerConfig>() {
@Override
public int compare(LoggerConfig o1, LoggerConfig o2) {
return (o1.getName().compareTo(o2.getName()));
}
};
原因:
字符串.compareTo
检查两者的前几个字符以找出差异(直到两者的最小长度),如果它们匹配,则使用长度来产生差异,最长的将在最短的后面(shortest.compareTo(longuest)
将返回负值(长度差异))
在本例中,”。与(“abc”)
相比,空字符串中没有字符,因此跳过第一次检查,并使用长度来比较字符串
s,因此始终会看到空字符串