У меня есть список строк, содержащих AA0 AA5 BB2 BB9 AA1 BB13 AA7 AA2
не в порядке.То, что я хочу, это две отдельные категории, такие как AA0 AA1 AA2 AA5 AA7 BB2 BB9 BB13
Как я могу это сделать?
Я пробовал myList.stream().sorted(mySorter).foreach(...);
, где mySorter
, как показано ниже:
private final Comparator<String> mySorter= ( o1, o2 ) -> {
try
{
final int first = Integer.parseInt( o1.substring( 2, o1.length() ) );
final int second = Integer.parseInt( o2.substring( 2, o2.length() ) );
System.out.println( o1 + " -> " + first + " " + o2 + " -> " + second );
if ( o1.contains( "AA" ) && o2.contains( "BB" ) )
{
return -1;
}
else if ( o1.contains( "AA" ) && o2.contains( "AA" ) )
{
return first - second;
}
else if ( o1.contains( "BB" ) && o2.contains( "BB" ) )
{
return first - second;
}
return first - second;
}
catch ( final Exception e )
{
e.printStackTrace();
return 0;
}
};
Я знаю, чтоон содержит ненужные блоки if / else, но в то же время у меня java.lang.IllegalArgumentException: Comparison method violates its general contract!
, что я не знаю почему.Я пытался решить исключение, и алгоритм мог делать то, что я хочу.Любая помощь приветствуется.Спасибо.