Question

J'écris un programme Java dans lequel je souhaite trier un ensemble d'articles et obtenir les n-éléments n-haches de l'ensemble.La chose est que je veux que les éléments soient renvoyés regroupés par leur rang - donc si je veux les 3 éléments les plus élevés, mais il y a une cravate entre deux éléments pour la troisième place, le troisième résultat est une collection qui contientles deux éléments liés.

Je sais que je pourrais m'écrire moi-même, mais je me demande si cela a déjà été mis en œuvre ailleurs.Est-ce que quelqu'un connaît quelque chose comme ça?

Était-ce utile?

La solution 2

C'est ce que j'ai fini par aller avec:

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

Autres conseils

sonne comme le Multimap de Google Collection pourrait être ce que vous êtes après.

Utilisez le "rang" comme clé lorsque vous insérez vos éléments.Puis triez les touches.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top