Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

209
Visualizações
Does Java have an alphabetical order like this?

Like in this example, https://www.duden.de/rechtschreibung/Regen_Niederschlag , the words are sorted in the following way: "regelwidrig, Regelwidrigkeit, Regelzeit, regen, Regen, Regenabflussrohr, Regenanlage, regenarm, Regenbö, Regenbogen..." that is, it is a "more non-case-sensitive" sorting than Collections.Sort() automatically does. Lowercase words come before uppercase ones like "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);
}

Collections.sort(regen) response:

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

I can implement a comparator for this, but I'd rather take one-liner of code to get this way of sorting. Such as: Collections.SomeMethod(regen); or Collections.Sort(regen, some_extra_parameter); But I haven't found after deep google search, unfortunately.

over 4 years ago · Santiago Trujillo
4 Respostas
Responde à pergunta

0

Just use a 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);

Result will be:

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

over 4 years ago · Santiago Trujillo Relatório

0

  • You can use String.CASE_INSENSITIVE_ORDER to order strings in case-insensitive way.

  • If you also at the same time want to farther specify order of elements which current comparator considers as equal (like String.CASE_INSENSITIVE_ORDER would do for "Regen" and "regen") then you can use Comparator#thenComparing method and pass to it Comparator which would sort those equal elements like you want.

    • Assuming you would also want to order "Regen", "regen" as "regen", "Regen" (lower-case before upper-case) you can simply reverse their natural order with Comparator.reverseOrder().

So your code can look like:

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

Demo:

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

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

(notice "Regen", "regen" ware swapped)

over 4 years ago · Santiago Trujillo Relatório

0

The reason why strings are sorted the way they are naturally sorted is because the ASCII values for these characters have a lower value for UPPERCASE than for lowercase. In this case, all words starts with "R" and the ASCII value of uppercase "R" is 82 (52 hex), whereas lowercase "R" is 114 (72 hex). For that reason, Regen will precede regen when sorting in natural order (in Java).

So, using plain Java

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

Will output

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

As you can see, all words starts with "R", but sorting puts all capitalized words ahead of ones that start with lowercase.

As @Pshemo indicated in his answer, you can (should) code your comparator account for case sensitivity and to reverse the order of lowercase vs uppercase as needed.

over 4 years ago · Santiago Trujillo Relatório

0

Collators

Use the Collator class for locale-sensitive String comparison.

Specifically, Java has support for German collators:

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

Example:

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda