package com.sun.masterexam;
import java.util.Arrays;
import java.util.Comparator;
class Comp2{
public static void main(String[] args){
String[] words = {“Good”,“Bad”,“Ugly”};
Comparator best = new Comparator(){
public int compare(String s1,String s2){
return s2.charAt(1) - s1.charAt(1);
}
};
Arrays.sort(words,best);
System.out.println(words[0]);
}
E aí, blz ?
Essa pergunta é meio estranha mesmo, mas é que involve uma série de conceitos que precisamos entender.
Vamos tentar ver o que acontece :
Temos esse array:
[code]
String[] words = {"Good","Bad","Ugly"};
[/code]
Neste ponto, ele NÃO ESTÁ CLASSIFICADO, porém, queremos classificá-lo, e para isso, usaremos a interface java.util.Comparator (Estudar java.lang.Comparable e java.util.Comparator).
Neste método que sobrescrevemos é que está o segredo:
[code]
public int compare(String s1,String s2){
return s2.charAt(1) - s1.charAt(1);
}
[/code]
Se prestarmos bastante atenção, podemos ver que ele está comparando o SEGUNDO ARGUMENTO com o PRIMEIRO, ou seja, EM ORDEM INVERTIDA, e notamos também que o parâmetro de comparação é a SEGUNDA LETRA (índice de arrays começam pelo 0).
[code]
Arrays.sort(words,best);
[/code]
O produto desse processamento só pode ser um array ordenado inversamente.
(Precisamos saber que o ordenamento por odem natural seria Bad-Ugly-Good por que A vem antes de G e O vem depois de G).
Como comparamos ao contrário, basta inverter a ordem do array, que ficará assim:
Good-Ugly-Bad
System.out.println(words[0]);
Logo, quando exibirmos o primeiro elemento do array (0), então surgirá a string “Good”.
Essa parte precisa ser estudada com muita atenção e de um tempinho para cair a ficha.
Espero ter ajudado !
Grando abraço,
Até Logo,
Rodrigo Lopes.