문제

항목 집합을 정렬하고 세트의 N 최고 요소를 가져 오는 Java 프로그램을 작성했습니다.그러나 그 일은 내가 요소를 순위에 의해 그룹화되도록 원하는 것입니다. 그래서 내가 3 개의 가장 높은 요소를 원한다면 세 번째 요소에 2 개의 요소 사이에 넥타이가 있으면 세 번째 결과가 포함 된 컬렉션입니다.두 개의 묶여있는 요소.

나는 이것을 나 자신을 쓸 수 있었다는 것을 알고 있지만, 나는 그것이 이미 다른 곳에서 구현되었는지 궁금해하고있다.아무도이 같은 것을 알고 있습니까?

도움이 되었습니까?

해결책 2

이것은 내가 끝내었던 것입니다 :

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

다른 팁

Google 컬렉션의 멀티 맵 님이 당신이 이후 일 수 있습니다.

요소를 삽입 할 때 "순위"를 키로 사용하십시오.그런 다음 키를 정렬하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top