【问题标题】:How to sort collection in my pre-defined order?如何按我的预定义顺序对集合进行排序?
【发布时间】:2016-01-24 11:42:18
【问题描述】:

例如,我有下一个字符串列表:

List<String> s = newArrayList("string", "someString", "anotherStr", "yetAnotherString", "Something");

我需要以一种特殊的方式对其进行排序,例如: yetAnotherString、someString、anotherStr、string、Something

所以没有字母或字典顺序,在伪代码中它会这样:

if (el == yetAnotherString)
{
 set order 1;
}
else if (someString)
{
 set order 2;
} ....

java Collections 或 guava 是否允许进行此类排序?

【问题讨论】:

  • 不要与==比较字符串,而是equals
  • @Dici 如果您仔细阅读,您会发现,最后一个代码块是作为伪代码给出的。虽然它不会使您的建议变得不那么有用,但谢谢:)

标签: java sorting collections guava


【解决方案1】:

如果你有想要按什么顺序排列的元素列表,那么 Guava 提供Ordering.explicit;您可以传递元素的顺序,然后将其用作Comparator 进行排序。

【讨论】:

    【解决方案2】:

    如果存在这样的顺序,那么您应该可以在Comparator 中表达它,即:给定两个元素决定它们的顺序。一旦你这样做了,你就可以将你的 Comparator 传递给 sort 方法

    Collections.sort(list,comparator);
    

    【讨论】:

    • 那么,我需要写出所有元素之间的关系吗?
    • 如果你已经知道排序顺序是什么,那么直接将它们添加到arraylist中。为什么要比较它们?所以为什么要比较器?
    • @premkumar 这个arraylist我只是举个例子,其实有一个比较难的逻辑,所以不能直接放,需要得到list后才能排序
    • @JisforJava 我不太了解您的订购标准,但如果它基于常量字符串,那么是的,您必须手动完成
    • @SleimanJneidi 实际上没有标准。正如你所提到的,我只需要将它与常量字符串进行比较
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多