У меня есть простое java pojo, которое выглядит так:
class MyClass
{
public String getGroup();
public String getTitle();
}
Теперь я хочу отсортировать список pojo MyClass по значениям, возвращаемым методом getTitle (). Спокойно, хотя использую мой собственный компаратор. Однако я хочу, чтобы экземпляры с одинаковым значением, возвращаемым 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")
-> сортировка по заголовку, но убедитесь, что каждая равная группа следует друг за другом, поэтому MyClass 1 с заголовком «5» следует за MyClass 2 с заголовком «9» ...