Существует дешевая надстройка Excel, которая решает эту проблему: SumMatch
[/g1]
Вам нужен a NavigableSet
. Еще необходимо будет сделать это неэффективно, выполняя итерации через целое SortedSet
и сбор элементов в a Queue
то, что Вы сохраняете обрезанными в 25 элементах.
SortedSet<T>
был разработан, приняв очень простую итеративную модель, передайте только, таким образом найдя, что вершина n записи легка, но находящая, что последнее потребовало бы дорогого чтения через итератор, поддерживающий окно последних n записей.
NavigableSet<T>
добавление в 1,6 решает это (и единственная реализация SortedSet от 1.4 TreeSet реализует его так, это, вероятно, будет понижение замены для Вас).
NavigableSet<T> set = new TreeSet<T>();
// add elements
set.descendingIterator() // iterate over the last n entires as needed
Инвертируйте свой вид и возьмите первые 25 объектов. Можно затем инвертировать тех, которые будут эффективны как его только 25 объектов.
Bruce
Другая структура данных более подходила бы для этой операции.
Это не изящный путь или очень эффективный, но предположение, что SortedSet в порядке возрастания, Вы могли получить Последнее () объект и удалить его, храня его в другом списке, и повториться 25 раз. Необходимо было бы затем отложить эти элементы снова!
Бросьте Набор в Список и используйте подсписок (). Я не уверен, как производительный это должно создать Список, таким образом, необходимо было бы запустить некоторые тесты. Это, конечно, сделало бы кодирование легким все же.
List f = new ArrayList( summaries);
List lastTwentyFive = f.subList( summaries.size() - 25, summaries.size() );
Я предполагаю, что это вряд ли будет иметь любое реальное применение в Вашем проекте, но стоит отметить, что Вы могли бы просто смочь отсортировать список в противоположном направлении вместо этого :)