public int winsAgainst(Distribution other) {
        // TODO: this could be a bit faster with binary search instead of
        // scanning.  Would require random-access lists instead of iterators,
        // which is currently not supported since we use multisets.
        int wins = 0;
        int eirIndex = 0;
        Iterator<Hand> myHands = getHands().iterator();
        Iterator<Hand> eirHands = other.getHands().iterator();
        Hand mine = null;
        while (eirHands.hasNext()) {
            // grab eir next best hand
            Hand eirs = eirHands.next();
            eirIndex++;
            // Adavance my hand until I can beat it
            boolean advanced = false;
            while ((mine == null) || (mine.compareTo(eirs) <= 0)) {
                if (!myHands.hasNext()) {
                    // I'm all out of hands and can't beat eir current hand.  I
                    // have no more wins to report.
                    return wins;
                }
                mine = myHands.next();
                advanced = true;
            }
            // I have a winner!  What kind?
            if (advanced) {
                // This is a new winner.  It beats eir hand and all eir worse hands.
                wins += eirIndex;
            } else {
                // This is the same winner as the last time through the loop.
                // Give it credit for beating one more of eir hands.
                wins += 1;
            }
        }
        // E has no more hands; each of my remaining hands beats all eir hands.
        while (myHands.hasNext()) {
            myHands.next();
            wins += eirIndex;
        }
        return wins;
    }