【问题标题】:Sorting ArrayList<String> by an Integer parsed from each String from Highest-> Lowest? [duplicate]通过从最高->最低的每个字符串解析的整数对 ArrayList<String> 进行排序? [复制]
【发布时间】:2016-09-07 17:55:38
【问题描述】:

例如,我会说我在 ArrayList 中有 10 个字符串,每个字符串代表一个人的姓名和年龄:

David:43
John:10
Wilson:23
George:59
Pat:3
Tom:52
Sydney:32
Mohammed:72
Jay:34
Adam:18

我们将这个 ArrayList 称为“人”

它们都在我的 ArrayList 中。我可以使用

来获取年龄
Integer.parseInt(people.get(index).split(":")[1]);

但我想对 ArrayList 进行排序以打印出从最高到最低年龄的人。我想知道是否有任何方法可以做到这一点。如果有,是否有更有效的方法来做到这一点?

【问题讨论】:

  • 使用Collections.sort()Comparator 进行年龄解析。

标签: java sorting arraylist


【解决方案1】:

有一个更高效、更易读且可扩展的选项。使用对象。 Java 是一种面向对象的语言,一个存储nameage 并实现Comparable 以允许您的对象之间进行比较的Person 对象完美地解决了您的问题。使用CompareTo 方法来定义您的对象应该如何进行比较。例如:

public class Person implements Comparable<Person> {
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String name;
  public int age;

  @Override
  public int compareTo(Person other){
    return (age - other.age);
  }
}

然后在您的代码中使用ArrayList&lt;Person&gt; 而不是ArrayList&lt;String&gt;。不要将"David:43" 添加到您的列表中,而是将new Person("David", 43) 添加到您的列表中。

然后像这样简单地对列表进行排序:

Collections.sort(yourlist);

【讨论】:

  • 感谢您的快速回复!似乎正是我正在寻找的东西!我试试看,不胜感激!
  • @David 乐于助人
  • 嘿@nhouser9,效果很差,只有一个问题。它从最低到最高打印出来。有什么办法可以改变这个吗?编辑:我设法弄清楚了,对于遇到此问题的任何人来说,这里都是简单的解决方案:Collections.sort(people, Collections.reverseOrder());
  • @David 是的,您可以使用任何您想要的自定义逻辑简单地更改您的 compareTo 方法。要从最高到最低,请更改减法的顺序。您甚至可以使用return name.compareTo(other.name) 按名称排序。与元素排序有关的所有内容都可以通过您比较这些元素的方式来控制。
猜你喜欢
  • 1970-01-01
  • 2016-07-03
  • 2021-12-01
  • 2016-06-25
  • 2017-03-25
  • 2016-03-19
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
相关资源
最近更新 更多