У меня естьПолучить заказанное подмножество из мультимножества наиболее часто повторяемого X
Multiset<String> keys
Я хочу иметь MultiSet с 200 наиболее частыми клавишами. Я выяснил, как получить ImmutableMultiset, который упорядочен по частоте, но у меня проблемы с получением только его подмножества.
я получил сортировочный аспект от этого другого stackOverFlow question
ImmutableMultiset<String> orderedMultiset = Multisets.copyHighestCountFirst(keys);
Для подмножества аспекта я попытался с помощью MinMaxPriorityQueue, чтобы я мог использовать MaximumSize (200).
MinMaxPriorityQueue<String> orderedSubset = MinMaxPriorityQueue.maximumSize(200).create(orderedMultiset);
Но, похоже, он возвращает только случайный выбор из 200 ключей. И проверка верхнего значения из упорядоченногоMultiset даже не появляется в возвращенном MinMaxPriorityQueue. Я также боюсь, что даже если бы это привело их в порядок, у меня могло получиться только пара разных ключей, где сумма подсчетов составляла 200. И желательно, чтобы у меня было 200 разных ключей со счетом для каждого.
Я спросил кого-то, и они упомянули что-то о POJO и сравнительном, но я не последовал тому, что они предложили. Поскольку POJO не может реально реализовать Comparable по определению. Я не совсем уверен.
Я также играл с использованием заказа guava, но я не думаю, что это сработает, поскольку функция будет принимать строки и не знает о счетах из мультимножества.
MinMaxPriorityQueue<String> strings = MinMaxPriorityQueue.orderedBy(topKCount).maximumSize(200).create(multisets);
private final Ordering<String> topKCount = Ordering.natural()
.onResultOf(new Function<String, String>() {
@Override
public String apply(String keys) {
//todo
}
});
Кто-нибудь знает, что я делаю неправильно здесь или, по крайней мере, укажу в правильном направлении. Спасибо
Это было именно то, что я, как искал спасибо. Я самостоятельно знал о методах elementSet() и subList, но на самом деле не собрал их, чтобы объединить их. –
В Java 8 мне пришлось делать: Multisets.copyHighestCountFirst (termFrequenciesInAllLists) .elementSet(). Stream(). Collect (Collectors.toList()). SubList (0, 200); – seinecle
Я не уверен, зачем вы делаете '.stream(). Collect (Collectors.toList())' вместо 'ImmutableList.copyOf (...)' или 'new ArrayList <> (...)' –