我有一个字符串列表,包含
我尝试过使用以下类似的代码:
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!
异常,而我不知道为什么会出现这个异常。我一直在尝试解决这个异常,并使算法能够实现我想要的功能。希望能得到任何帮助,谢谢。