Pregunta

Estoy escribiendo un programa Java en el que quiero ordenar un conjunto de artículos y obtener los elementos más altos del conjunto.Sin embargo, la cosa es que quiero que los elementos se devuelvan agrupados por su rango, por lo que si quiero los 3 elementos más altos, pero hay un empate entre dos elementos para el tercer lugar, entonces el tercer resultado es una colección que contieneLos dos elementos atados.

Sé que podría escribirme yo mismo, pero me pregunto si ya se ha implementado en otro lugar.¿Alguien sabe de algo así?

¿Fue útil?

Solución 2

Esto es lo que terminé yendo con:

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

Otros consejos

Suena como el Multimap de la colección de Google podría ser lo que buscas.

Use el "rango" como su clave cuando se inserta sus elementos.Luego ordena las teclas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top