8
votes

Comparateur Java pour tri multi-colonnes?

Y a-t-il un comparateur Java Open-Source pour comparer des haricots par plusieurs champs pour le tri multicolores? Chaque colonne peut être triée ascédant ou descendant.

Pour le tri à colonne, il peut être obtenu en utilisant org.apache.commons.beanutils.beancomparator avec org.springframework.util.charator.invertiblecomparator .

Je suis conscient que cette fonctionnalité est assez triviale à écrire, mais quels sont les avantages de réinventer la roue, si c'était déjà écrit et testé?


0 commentaires

3 Réponses :


7
votes

J'ai écrit cela il y a quelques mois.

public abstract class ChainedComparator<T> implements Comparator<T> {

    private Comparator<T> next;

    @Override
    public int compare(T o1, T o2) {
        int result = doCompare(o1, o2);
        if (result == 0) {
            if (getNext() != null) {
                return getNext().compare(o1, o2);
            }
        }

        return result;
    }

    public abstract int doCompare(T o1, T o2);

    public Comparator<T> getNext() {
        return next;
    }

    public void setNext(Comparator<T> next) {
        this.next = next;
    }
}


2 commentaires

Le nom de votre classe m'a rappelé des org.apache.commons.collections.comparatoratorchain :)


Oui, c'est ce que j'ai trouvé il y a quelques minutes seulement. Peut-être devait-il en premier, avant de la mettre en œuvre :)



1
votes

JSORTER est une autre alternative open source pour le tri multi-colonne en Java. http://sourceforge.net/projects/jsorter/


0 commentaires

1
votes

J'ai récemment écrit un comparateur pour trier plusieurs champs dans un enregistrement de chaîne délimité. Il vous permet de définir le délimiteur, la structure d'enregistrement et les règles de tri (dont certaines sont spécifiques à un type).

Les informations requises sont ensemencées au comparateur lui-même, soit programmatiquement, soit via un fichier XML. P>

XML est validé par un fichier XSD incorporé par un package. Par exemple, ci-dessous est une mise en page d'enregistrement délimitée à l'onglet avec quatre champs (dont deux sont triables): p> xxx pré>

Vous utiliseriez alors cela dans Java, comme si: P>

Comparator<String> comparator = new RowComparator(
              new XMLStructureReader(new File("layout.xml")));


0 commentaires