Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

preciso de ajuda para entender partes de um codigo em java

Existem alguns metodos que estão fora do meu entendimento, por exemplo @overide e abaixo dele entre parenteses duas \ seguidas de um S ("\S") alguem pode me explicar?

obrigado

package kingsort;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class KingSort {

    private static final Map<String, Integer> map = new HashMap<String, Integer>();

    static {
            String[] romanos = new String[] {"I", "II", "III", "IV", "V", "VI", "VII", "VIII","IX"};
        for (int i = 0; i < 9; ++i) {
                    map.put(romanos[i], i + 1);
                    map.put("X" + romanos[i], i + 1 + 10);
                    map.put("XX" + romanos[i], i + 1 + 20);
                    map.put("XXX" + romanos[i], i + 1 + 30);
                    map.put("XL" + romanos[i], i + 1 + 30);
        }

            Integer put = map.put("X", 10);
        map.put("XX", 20);
        map.put("XXX", 30);
        map.put("XL", 40);
        map.put("L", 50);
    }

    public String[] getSortedList(String[] kings) {

        List<String> list = Arrays.asList(kings);
        Collections.sort(list, new Comparator<String>() {

            @Override
            public int compare(String nome1, String nome2) {
                            String[] simbolo1 = nome1.split("\\s");
                            String[] simbolo2 = nome2.split("\\s");
                            if (simbolo1[0].equals(simbolo2[0])) {
                                    return compareOrdinal(simbolo1[1], simbolo2[1]);
                            } else {
                                    return simbolo1[0].compareTo(simbolo2[0]);
                            }
            }

            private int compareOrdinal(String ord1, String ord2) {
                            int valor1 = map.get(ord1);
                            int valor2 = map.get(ord2);
                            if (valor1 > valor2) {
                                    return 1;
                            } else if (valor1 < valor2) {
                                    return -1;
                            } else {
                                    return 0;
                            }
            }

        });

        return list.toArray(new String[0]);
    }

    public static void main(String[] args) {
        KingSort sort = new KingSort();
        String[] result = sort.getSortedList(new String[] {"Louis IX", "Louis VIII", "Philippe II", "Richard III", "Richard I", "Richard II", "John X", "John I", "John L", "John V", "Philippe VI", "Jean II", "Charles V", "Charles VI", "Charles VII", "Philip II" });
        for (String item : result) {
            System.out.println(item);
        }
    }
}
2 respostas

Fala João, então esse @Override é uma anotação do java. Anotações entraram no java a partir do java 5 e são usadas para dar informações a mais para métodos, classes ou variáveis.

Nesse caso essa anotação faz o compilador conferir se você fez realmente uma sobrescrita de método

solução!

Boa noite, João! Como vai?

Só pra complementar o que o Guilherme já falou, o \s representa uma expressão regular que irá combinar com qualquer caractere que represente um espaço em branco, como por exemplo, o próprio espaço em branco simples, o espaço de tabulação, dentre outros.

Além disso, é necessário o acréscimo de uma outra \ antes do \s como forma de "escape" pq a \ é um caractere especial dentro das expressões regulares.

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!