java - 返回排序后的 List<Object>,其中第一项值始终为空

标签 java linked-list

使用对象列表,其中其中一个项目具有空字符串。尝试编写返回排序列表的方法。排序意味着列表的第一项值应始终为空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/

相关文章:

java - 如何将 Java 接口(interface)迁移到微服务?

java - unix 上的 MSSQL JDBC

java - 字符串索引越界错误,基本程序

c - 搜索链表时输出错误

java - 从同一文件夹中的 JAR 访问文件

java - 将图像放入 res/drawable 目录后出现语法错误

arrays - 在不到 O(n) 的时间内反转数组的子数组

java - 为什么 LinkedHashSet 不实现 List?

java - Java中通过链表进行递归

java - 单链表复制困惑