Mam klasy IndexEntry
który wygląda tak:Jak uzyskać najczęstsze słowo w mapie i jego częstotliwość występowania za pomocą strumieni Java 8?
public class IndexEntry implements Comparable<IndexEntry>
{
private String word;
private int frequency;
private int documentId;
...
//Simple getters for all properties
public int getFrequency()
{
return frequency;
}
...
}
jestem przechowywania obiektów tej klasy w Guava SortedSetMultimap
(co pozwala na wiele wartości na klucz), gdzie jestem mapowania String
słowo do niektórych IndexEntry
s . Za kulisami mapuje każde słowo na SortedSet<IndexEntry>
.
Próbuję wprowadzić rodzaj indeksowanej struktury słów do dokumentów i ich częstotliwości występowania w dokumentach.
Wiem, jak uzyskać liczyć z najbardziej popularnego słowa, ale nie mogę wydawać się, aby uzyskać samo słowo.
Oto co mam się liczyć z najbardziej wspólnej kadencji, gdzie entries
jest SortedSetMultimap
, wraz z metod pomocniczych:
public int mostFrequentWordFrequency()
{
return entries
.keySet()
.stream()
.map(this::totalFrequencyOfWord)
.max(Comparator.naturalOrder()).orElse(0);
}
public int totalFrequencyOfWord(String word)
{
return getEntriesOfWord(word)
.stream()
.mapToInt(IndexEntry::getFrequency)
.sum();
}
public SortedSet<IndexEntry> getEntriesOfWord(String word)
{
return entries.get(word);
}
próbuję Java Dowiedz 8 możliwości, ponieważ wydają bardzo przydatne . Jednak nie mogę sprawić, by strumień działał tak, jak chcę. Chcę być w stanie mieć zarówno słowo, jak i jego częstotliwość na końcu strumienia, ale jeśli nie, to z łatwością mogę uzyskać całkowite wystąpienie tego słowa.
Obecnie wciąż kończę z Stream<SortedSet<IndexEntry>>
, z którym nie mogę nic zrobić. Nie wiem, jak uzyskać najczęstsze słowo bez częstotliwości, ale jeśli mam częstotliwość, nie mogę śledzić odpowiedniego słowa. Próbowałem stworzyć klasę POJO WordFrequencyPair
do przechowywania obu, ale wtedy miałem tylko Stream<SortedSet<WordFrequencyPair>>
i nie mogłem wymyślić, jak zamapować to na coś użytecznego.
Czego mi brakuje?
Więc załóżmy, że muszę zobaczyć wszystkie identyfikatory dokumentów, że dany wyraz był obecny wraz z liczbą wystąpień w danym dokumencie. W twoim przykładzie, jak miałbym to zrobić? –
Napiszę metodę, żeby to zrobić i wyjaśnię, jak działa –
Myślę, że to zadziała. Dzięki! –