Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

207
Vistas
¿Java tiene un orden alfabético como este?

Como en este ejemplo, https://www.duden.de/rechtschreibung/Regen_Niederschlag , las palabras se ordenan de la siguiente manera: "regelwidrig, Regelwidrigkeit, Regelzeit, regen, Regen, Regenabflussrohr, Regenanlage, regenarm, Regenbö, Regenbogen.. .", es decir, es una ordenación que "no distingue entre mayúsculas y minúsculas" de lo que hace automáticamente Collections.Sort(). Las palabras en minúsculas van antes de las mayúsculas como "regen, Regen".

 ArrayList<String> regen = new ArrayList<String>( ); for(String x : new String[]{"regelwidrig", "Regelwidrigkeit", "Regelzeit", "regen", "Regen", "Regenabflussrohr", "Regenanlage", "regenarm", "Regenbö", "Regenbogen"}) { regen.add(x); }

Respuesta de Collections.sort(regen):

[Regelwidrigkeit, Regelzeit, Regen, Regenabflussrohr, Regenanlage, Regenbogen, Regenbö,
regelwidrig, regen, regenarm]// lowercase at the end

Puedo implementar un comparador para esto, pero prefiero tomar una sola línea de código para obtener esta forma de clasificación. Tales como: Collections.SomeMethod(regen); o Collections.Sort(regen, some_extra_parameter); Pero no lo he encontrado después de una búsqueda profunda en Google, desafortunadamente.

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

Simplemente use un oneliner "Comparator.comparing"

 List<String> regen = new ArrayList<String>( ); for(String x : new String[]{"regelwidrig", "Regelwidrigkeit", "Regelzeit", "regen", "Regen", "Regenabflussrohr", "Regenanlage", "regenarm", "Regenbö", "Regenbogen"}) { regen.add(x); } Collections.sort(regen, Comparator.comparing(s -> s.toLowerCase())); System.out.println(regen);

El resultado será:

regelwidrig, Regelwidrigkeit, Regelzeit, regen, Regen, Regenabflussrohr, Regenanlage, regenarm, Regenbogen, Regenbö

over 4 years ago · Santiago Trujillo Denunciar

0

  • Puede usar String.CASE_INSENSITIVE_ORDER para ordenar cadenas sin distinguir entre mayúsculas y minúsculas.

  • Si al mismo tiempo también desea especificar más el orden de los elementos que el comparador actual considera iguales (como lo haría String.CASE_INSENSITIVE_ORDER para "Regen" y "regen" ), entonces puede usar el método Comparator#thenComparing y pasarle Comparator que ordenaría esos elementos iguales como quieras.

    • Suponiendo que también desee ordenar "Regen", "regen" como "regen", "Regen" (minúsculas antes de mayúsculas), simplemente puede invertir su orden natural con Comparator.reverseOrder() .

Entonces su código puede verse así:

 regen.sort(String.CASE_INSENSITIVE_ORDER.thenComparing(Comparator.reverseOrder()));

Manifestación:

 ArrayList<String> regen = new ArrayList<String>( Arrays.asList("regelwidrig", "Regelwidrigkeit", "Regelzeit", "Regen", "regen", "Regenabflussrohr", "Regenanlage", "regenarm", "Regenbö", "Regenbogen") ); regen.sort(String.CASE_INSENSITIVE_ORDER.thenComparing(Comparator.reverseOrder())); System.out.println(regen);

Resultado: [regelwidrig, Regelwidrigkeit, Regelzeit, regen, Regen, Regenabflussrohr, Regenanlage, regenarm, Regenbogen, Regenbö]

(Aviso "Regen" , "regen" ware intercambiado)

over 4 years ago · Santiago Trujillo Denunciar

0

La razón por la que las cadenas se ordenan de forma natural es que los valores ASCII de estos caracteres tienen un valor más bajo para MAYÚSCULAS que para minúsculas . En este caso, todas las palabras comienzan con "R" y el valor ASCII de la "R" mayúscula es 82 (52 hex), mientras que la "R" minúscula es 114 (72 hex). Por esa razón, Regen precederá a regen al ordenar en orden natural (en Java).

Entonces, usando Java simple

 public static void main(String[] args) { List<String> words = Arrays.asList(new String[]{"regelwidrig", "Regelwidrigkeit", "Regelzeit", "regen", "Regen", "Regenabflussrohr", "Regenanlage", "regenarm", "Regenbö", "Regenbogen"}); Collections.sort(words); System.out.println(words); }

Saldrá

 [Regelwidrigkeit, Regelzeit, Regen, Regenabflussrohr, Regenanlage, Regenbogen, Regenbö, regelwidrig, regen, regenarm]

Como puede ver, todas las palabras comienzan con "R", pero la ordenación coloca todas las palabras en mayúscula antes que las que comienzan con minúsculas.

Como @Pshemo indicó en su respuesta, puede (debe) codificar su cuenta de comparación para distinguir entre mayúsculas y minúsculas e invertir el orden de minúsculas frente a mayúsculas según sea necesario.

over 4 years ago · Santiago Trujillo Denunciar

0

Cotejadores

Utilice la clase Collator para la comparación de String sensibles a la configuración regional.

Específicamente, Java tiene soporte para recopiladores alemanes:

 Collator collator = Collator.getInstance(Locale.GERMAN); regen.sort(collator);

Ejemplo:

 List<String> inputs = new ArrayList <>( List.of( "regelwidrig", "Java", "Regelwidrigkeit", "Regelzeit", "regen", "Regen", "Regenabflussrohr", "Regenanlage", "regenarm", "Regenbö", "Regenbogen" ) ); inputs.sort( java.text.Collator.getInstance( Locale.GERMAN ) ) ;

[Java, regelwidrig, Regelwidrigkeit, Regelzeit, regen, Regen, Regenabflussrohr, Regenanlage, regenarm, Regenbö, Regenbogen]

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda