【问题标题】:Best way to sort a String ArrayList with numbers in it对包含数字的字符串 ArrayList 进行排序的最佳方法
【发布时间】:2014-03-27 12:54:31
【问题描述】:

我有一个以这种样式设置的数组列表...

  • 4 条狗
  • 10 只猫
  • 2 条狗

我想对它进行排序,这样 ArrayList 将按...的顺序排列

  • 1 条狗
  • 4 条狗
  • 10 只猫

在不使用比较器或其他方法的情况下,通过取出数字(用空格“”分割字符串?)、比较它们并将排序结果放回 ArrayList 来对它们进行排序的最短、最简单的方法是什么?如果您能附上您的代码 sn-p,将不胜感激。

【问题讨论】:

  • 你不想使用比较器对我来说毫无意义。有人必须比较这些项目,不是吗?否则你会如何推断哪个项目更大。
  • 比较器是最好的排序方式。使用它。
  • 对不起,我误解了比较器的定义。这正是我的意思。谢谢!

标签: java sorting arraylist


【解决方案1】:

最简单的方法是使用比较器:

Collections.sort(list, new Comparator<String>() {
    public void compare(String one, String two) {
         return getNumber(one) - getNumber(two);
    }
    private int getNumber(String str) {
        return Integer.parseInt(one.split(" ")[0]);
    }
}

我真的不知道还有什么可以更简单的。

【讨论】:

  • 非常感谢。抱歉,我一定误解了比较器的定义。
【解决方案2】:

如果没有显式比较器,请尝试使用 Java 8 的 Lambda 功能:

//Assuming that the list variable is a string that looks like e.g. "1 10 2 5"

Arrays.sort(list.split(" "), 
    (String a, String b) -> { return Integer.valueOf(a).compareTo(Integer.valueOf(b)) }; 
);

//Assuming that the list variable is an array list of Strings

Collections.sort(list, 
    (String a, String b) -> { return Integer.valueOf(a).compareTo(Integer.valueOf(b)) }; 
);

【讨论】:

  • 正如我在回答中提到的那样。
【解决方案3】:

您需要在该类中创建一个具有String 字段的类,并实现compareTo 方法并编写比较逻辑。

ArrayList中使用这个类对象,然后使用Collections.sort方法。

【讨论】:

  • "不使用 Comparator,Java 中无法进行排序。"除非您只是在方法中实现自己的排序算法...
  • 那是肯定的 :) 我的意思是使用 JAVA API。
  • “不使用 Comparator,Java 中无法进行排序”错误句子。你可以通过任何方法或算法来做到这一点。
猜你喜欢
  • 2014-05-05
  • 1970-01-01
  • 2014-12-07
  • 2017-02-24
  • 2020-02-18
  • 2016-10-28
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多