Clasificación de diferentes cadenas de tipo en la lista

Imagen :

Tengo una lista de cadena que contiene AA0 AA5 BB2 BB9 AA1 BB13 AA7 AA2no en orden. Lo que quiero es dos categorías separadas ordenaron como AA0 AA1 AA2 AA5 AA7 BB2 BB9 BB13¿Cómo podría hacer eso?

He tratado myList.stream().sorted(mySorter).foreach(...);, donde mySorter, como a continuación:

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

Soy consciente de que sí contiene unnecessarry si / bloques más, pero estoy teniendo java.lang.IllegalArgumentException: Comparison method violates its general contract!, al mismo tiempo que no tengo idea de por qué. Estado tratando de resolver la excepción y el algoritmo podría hacer lo que quiera. Cualquier ayuda apreciada. Gracias.

rzwitserloot:

Cualquier comparador debe seguir las siguientes reglas:

  1. Si A<B(como en, a.compareTo(b)devuelve un número negativo), entonces B>Adebe ser verdad (como en, si se va a llamar b.compareTo(a), se DEBE devolver un número positivo).
  2. A=A( a.compareTo(a) DEBE devolver 0).
  3. Si A<By B<Centonces esto debe tener: A<C.

significa que el error no está haciendo eso.

Parece que usted está indicando que todas las categorías AA preceden a todas las categorías BB (a través de la línea ( o1.contains( "AA" ) && o2.contains( "BB" ) ), pero no agregó a la inversa, donde todos los BBs vienen después de todos los AA. Tienes que escribirlo en parejas o no funcionará. arreglar eso. Tal vez hay más violaciónes, pero, un paso a la vez.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=199107&siteId=1
Recomendado
Clasificación