Pergunta

Eu estou escrevendo um programa em Java no que eu quero para classificar um conjunto de itens e obter o N-maior de elementos do conjunto.A coisa, porém, é que eu quero que os elementos a serem retornados agrupados pela classificação -- então, se eu quero o 3 mais elevado de elementos, mas há um empate entre dois elementos para o terceiro lugar, em seguida, o terceiro resultado é uma coleção que contém os dois amarrados elementos.

Eu sei que eu poderia escrever isso mesmo, mas eu estou querendo saber se ele já foi implementado em outro lugar.Alguém sabe de uma coisa como essa?

Foi útil?

Solução 2

Isso é o que eu acabei indo com:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.google.common.collect.Ordering;

public final class Sorting {
    private Sorting() {}

    public static <T extends Comparable<? super T>> List<List<T>> rank(
            Iterable<T> iterable, int nRanks) {
        if (nRanks < 0) {
            throw new IllegalArgumentException(Integer.toString(nRanks));
        }
        if (nRanks == 0) {
            return new ArrayList<List<T>>();
        }

        Iterator<T> iter = Ordering.natural().sortedCopy(iterable).iterator();
        List<List<T>> ret = new ArrayList<List<T>>();
        if (iter.hasNext()) {
            T prev = iter.next();
            List<T> group = new ArrayList<T>();
            group.add(prev);
            ret.add(group);

            int rank = 1;
            while (iter.hasNext()) {
                T next = iter.next();
                if (prev.compareTo(next) > 0) {
                    rank++;
                    if (rank > nRanks) {
                        break;
                    }

                    group = new ArrayList<T>();
                    ret.add(group);
                }
                group.add(next);
                prev = next;
            }
        }

        return ret;
    }
}

Outras dicas

Soa como o multimap da coleção do Google Pode ser o que você é depois.

Use o "Rank" como sua chave ao inserir seus elementos.Em seguida, classifique as chaves.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top