当前位置: 首页 > 知识库问答 >
问题:

如何按2个字段对数组列表进行排序?[重复]

黄德明
2023-03-14

我有一个包含下一个数据的ArrayList:coordX(int)、coordY(int)、长度(int)、位置(String)。我按长度字段对此数组进行排序。如果长度与提交的位置相等,我如何赋予优先级(优先级将具有具有水平位置的长度)。例如,给定输入:

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);
    }
}

共有1个答案

赫连昕
2023-03-14
        List<YourClass> list = new ArrayList<>();

下面的代码是这样工作的。

  • Comparator.comparing(YourClass::getLlong).反转()按降序对长度字段进行排序。
  • 如果上面的结果长度相等,那么. thenComping(YourClass::getPotion)按词法顺序对位置进行排序。
        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;
    }
}

 类似资料:
  • 问题内容: 我有一个Java对象列表,希望根据多个字段进行排序。 是否可以使用或接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。

  • 问题内容: 我有一个从排序的csv创建的以下列表 我实际上想按两个条件对列表进行排序:首先按字段1中的值,然后按字段2中的值。我该怎么做? 问题答案: 像这样:

  • 问题内容: 我有这样的数组 如何按return_fare asc和one_way_fare asc排序值? 我尝试了array_multisort()但最终却得到了混乱的数据。 Asort仅适用于一维数组,我需要按两个或多个值进行排序,我如何才能像SQL中那样实现此功能,按field1 asc,field2 asc排序? 问题答案: 是正确的函数,您必须以某种方式搞砸了: 如果您在PHP的手册页上

  • 我试图实现对存储在列表中的对象字段值的排序。 我找到了下面的解决方案来比较字符串,但是我如何比较字符串值并相应地排序? 我想先排序"Y"状态值然后"N"

  • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。

  • 问题内容: 比方说你有一个的对象。 如果它们都具有int GoalScored变量,则如何排序?你如何按GoalScored排序? 问题答案: 你可以使用Collections.sort自定义Comparator 。 比较部分也可以这样写: 或者,你可以制作。这定义了所有对象的自然顺序。使用a 更灵活,因为不同的实现可以按名称,年龄等进行排序。