gpt4 book ai didi

java - 双向排序的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:30 24 4
gpt4 key购买 nike

我有一个简单的 java pojo,如下所示:

class MyClass
{
public String getGroup();
public String getTitle();
}

现在我想做的是主要根据 getTitle() 方法返回的值对 MyClass pojo 列表进行排序。虽然使用我自己的比较器很容易。但是,我想要的是 getGroup() 返回的具有相同值的实例彼此跟随。现在我所做的是这样的

.. compare(MyClass c1, MyClass c2)
{
if (c1.getGroup().compareTo(c2.getGroup()) == 0)
{
return c1.getTitle().compareTo(c2.getTitle());
}
return c1.getGroup().compareTo(c2.getGroup());
}

但是,此代码的问题是,它不再主要按标题排序,因为我首先比较组的内容,而不是标题,因此以“B”开头的组将出现在以“C”开头的组之前,尽管其标题可能排在第一位。主要按标题排序但确保组也“分组”在一起的正确方法是什么?

示例数据:

MyClass 1 (group = "A", title="5")
MyClass 2 (group = "B", title="9")
MyClass 3 (group = "B", title="1")

使用我以前的代码最终会出现

MyClass 1 (group = "A", title="5")
MyClass 3 (group = "B", title="1")
MyClass 2 (group = "B", title="9")

-> 按组排序,然后按标题排序

但我想要

MyClass 3 (group = "B", title="1")
MyClass 2 (group = "B", title="9")
MyClass 1 (group = "A", title="5")

-> 按标题排序,但确保每个相等的组彼此跟随,这就是为什么标题为“5”的 MyClass 1 仍然排在标题为“9”的 MyClass 2 之后...

最佳答案

what's the proper way to primarily sort by title but make sure groups are "groupped" together as well?

要按标题排序,然后按组排序,只需在比较器中的任意位置切换 getGroup()getTitle() 即可。

这是一个替代的简化版本:

int compare(MyClass c1, MyClass c2)
{
int cmp = c1.getTitle().compareTo(c2.getTitle());
if (cmp == 0) {
cmp = c1.getGroup().compareTo(c2.getGroup());
}
return cmp;
}

如果这不是您想要实现的目标,请澄清您的要求。

关于java - 双向排序的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com