【问题标题】:How to use Comparator and Comparable in ArrayList?如何在 ArrayList 中使用 Comparator 和 Comparable?
【发布时间】:2014-04-04 02:21:47
【问题描述】:

我需要根据列对 ArrayList 进行排序。即在我的 ArrayList 中,每行包含一些浮点值和一个字符串。它们中的每一个都使用逗号分隔。

例子:

1 row:---  4.9,5.1,2.3,1.0,classA

同样是所有行。

所以我想根据每个值对这个数组列表进行排序(基于所有行的第一个 val,类似地所有行)。

这里我如何使用 Comparator 和 Comparable?

【问题讨论】:

  • 你在说什么专栏?
  • 你的意思是你有一个 ArrayList 的 ArrayList 吗??
  • @Dahlia - 它不是那样工作的。在您的 ArrayList 中,您是否有一个带有 float + String 的对象?还是你有其他的数据结构?
  • 你试过什么? SO 的工作方式是你尽最大努力解决问题,展示你的工作,并提出一个具体的问题。我们一般不会为您编写代码。
  • 你的意思是你有一个ArrayList<String>?你有什么开始吗?

标签: java algorithm decision-tree


【解决方案1】:
public class FieldComparator implements Comparator<String> {

    private int column;
    private int numberOfFloats;

    public FieldComparator(int column, int numberOfFloats) {
        this.column = column;
        this.numberOfFloats = numberOfFloats;
    }

    @Override
    public int compare(String o1, String o2) {
        String[] o1Fields = o1.split(",");
        String[] o2Fields = o2.split(",");
        if (column < numberOfFloats) {
            return new Float(o1Fields[column]).compareTo(new Float(o2Fields[column]));
        } else {
            return o1Fields[column].compareTo(o2Fields[column]);
        }
    }   
}

您可以在排序或其他任何操作时将此类的实例用作Comparator。 排序参考ComparatorCollections的文档。

祝你好运。

【讨论】:

  • java.lang.Float(以及所有其他类似的包装器)从 java 1.4 开始就有一个静态 compareTo(float, float) 方法,应该真正使用它而不是 new Float.compareTo(new Float)成语。
【解决方案2】:

您需要使用Collections#sort。它需要你的数组列表和一个比较器。

您可以创建匿名 Comparator,在它的 compareTo 方法中,您将通过拆分两个字符串来获得第一个值,然后比较它们并相应地返回 -1,0,1。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 2020-11-22
    • 2012-11-12
    • 1970-01-01
    • 2013-01-28
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多