Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida no Ex. 2 da Aula 4 - Streams: trabalhando melhor com coleções

solução

Oi Marcos, tudo bem?

O String.CASE_INSENSITIVE_ORDER não tem o mesmo efeito do método compareTo().

Imagine a seguinte situação, onde temos "Alura online" e "Editora casa do codigo". Atente para o "A" e o "E" maísculos:

List<String> palavras = new ArrayList<>();
palavras.add("Alura online");
palavras.add("Editora casa do codigo");
palavras.add("caelum");

palavras.sort((String s1, String s2) -> s1.compareTo(s2));

System.out.println(palavras);

Quando executarmos o código, teremos:

[Alura online, Editora casa do codigo, caelum]

Perceba que o "caelum" ficou após o "Editora", ou seja o "c" ficou depois do "E". Não está em ordem alfabética.

Isso ocorre porque o método compareTo() realiza a comparação baseado no valor que se encontra na tabela ASCII: http://ic.unicamp.br/~everton/aulas/hardware/tabelaASCII.pdf.

Se você olhar a tabela o "A" e o "E" tem um número menor que o "c". Por isso esse comportamento do nosso programa.

Para finalizar, o String.CASE_INSENSITIVE_ORDER tem um comportamento similar ao método compareToIgnoreCase(). Isso é quando desejamos indicar que queremos ordenar em ordem alfabética independente das letras estarem em maísculo ou minísculo.

Basicamente é isso que queremos dizer com o "Ignore case". Estamos dizendo: java, não diferencie maísculas e minúsculas:

List<String> palavras = new ArrayList<>();
palavras.add("Alura online");
palavras.add("Editora casa do codigo");
palavras.add("caelum");


palavras.sort(String.CASE_INSENSITIVE_ORDER);
palavras.sort((String s1, String s2) -> s1.compareToIgnoreCase(s2)); // Ignore case: mesmo efeito

System.out.println(palavras);

Saída:

[Alura online, caelum, Editora casa do codigo]

Faz sentido?

Abraço!

2 respostas

palavras.sort(String.CASE_INSENSITIVE_ORDER);

esse método, tem o mesmo efeito desse método ?

palavras.sort((String s1, String s2) -> s1.compareTo(s2));

Ops, errei em onde colocar minha resposta de uma aula. Foi mal.