【问题标题】:How to sort an arraylist by 2 fields? [duplicate]如何按 2 个字段对数组列表进行排序? [复制]
【发布时间】:2020-07-14 12:40:57
【问题描述】:

我得到了一个 ArrayList,其中包含下一个数据:coordX (int) , coordY (int) , length (int), position (String)。我按 length 字段对该数组进行排序.如果长度与position 字段相等(优先级将具有具有水平位置的长度),我如何给予优先权。例如,给定输入:

coordX = 1  ,  coordY = 0   , length = 2  ,  position  - vertical
coordX = 5  ,  coordY = 3   , length = 2  ,  position  - horizontal
coordX = 1  ,  coordY = 6   , length = 4  ,  position  - horizontal
coordX = 3  ,  coordY = 6   , length = 1  ,  position  - "1x1"

输出应该是:

coordX = 1  ,  coordY = 6   , length = 4  ,  position  - horizontal
coordX = 5  ,  coordY = 3   , length = 2  ,  position  - horizontal
coordX = 1  ,  coordY = 0   , length = 2  ,  position  - vertical
coordX = 3  ,  coordY = 6   , length = 1  ,  position  - "1x1"

这是我所拥有的:

    public static void insertionSort(ArrayList<sort> srt) {
    int i,j;
    for (i = 1; i < srt.size(); i++) {
        sort tmp = srt.get(i);
        j = i;
        while ((j > 0) && (srt.get(j - 1).length > tmp.length)) {
            srt.set(j, srt.get(j - 1));
            j--;
        }
        srt.set(j, tmp);
    }
}

【问题讨论】:

  • 首先,有Collections.sort()。有了它,它看起来像:Collections.sort(list, Comparator.comparingInt(s -&gt; s.length).thenComparing(s -&gt; s.position)).
  • 您应该改用Collections.sort 并编写一个 Comparator 或让您的类实现 Comparable
  • 这能回答你的问题吗? Javascript sort array by two fields
  • @povisenko 这个问题是关于 Java 的,链接到 Javascript 的副本是不正确的。

标签: java


【解决方案1】:
        List<YourClass> list = new ArrayList<>();

下面的工作是这样的。

  • Comparator.comparing(YourClass::getLength).reversed() 按降序对长度字段进行排序。
  • 如果上述结果相等,则.thenComparing(YourClass::getPosition) 按词法顺序对位置进行排序。
        list.sort(Comparator.comparing(YourClass::getLength).reversed()
                .thenComparing(YourClass::getPosition));
        // or with no getters

        list.sort(Comparator.comparing((YourClass cl) -> cl.length).reversed()
                .thenComparing((YourClass cl) -> cl.position));

您的坐标类的可能结构。

class YourClass {
    int length;
    public String position;
    int coordX;
    int coordY;

    public int getLength() {
        return length;
    }

    public String getPosition() {
        return position;
    }

    public int getCoordX() {
        return coordX;
    }

    public int getCoordY() {
        return coordY;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2015-12-03
    相关资源
    最近更新 更多