J'ai une classe IndexEntry
qui ressemble à ceci:Comment obtenir le mot le plus fréquent dans une carte et sa fréquence d'occurrence correspondante en utilisant des flux 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;
}
...
}
je stocke des objets de cette classe dans une goyave SortedSetMultimap
(ce qui permet de multiples valeurs par clé) où je délimiterai un mot String
à quelques IndexEntry
s . Dans les coulisses, il met en correspondance chaque mot avec un SortedSet<IndexEntry>
. J'essaye de mettre en place une sorte de structure indexée des mots aux documents et de leurs fréquences d'occurrence à l'intérieur des documents.
Je sais comment obtenir le compter du mot le plus commun, mais je ne peux pas sembler obtenir le mot lui-même.
Voici ce que je dois obtenir le compte du terme le plus commun, où entries
est le SortedSetMultimap
, ainsi que des méthodes d'aide:
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);
}
Je suis en train d'apprendre Java 8 fonctionnalités, car ils semblent vraiment utiles . Cependant, je n'arrive pas à faire fonctionner le flux comme je le souhaite. Je veux être en mesure d'avoir à la fois le mot et sa fréquence à la fin du flux, mais sauf cela, si j'ai le mot, je peux très facilement obtenir le nombre total d'occurrences de ce mot.
Actuellement, je continue à me retrouver avec un Stream<SortedSet<IndexEntry>>
, avec lequel je ne peux rien faire. Je ne sais pas comment obtenir le mot le plus fréquent sans les fréquences, mais si j'ai la fréquence, je n'arrive pas à suivre le mot correspondant. J'ai essayé de créer une classe WordFrequencyPair
POJO pour stocker les deux, mais ensuite j'ai juste eu un Stream<SortedSet<WordFrequencyPair>>
, et je ne pouvais pas comprendre comment mapper cela en quelque chose d'utile.
Qu'est-ce qui me manque?
Ainsi, supposons que je devais voir tous les documents ids qu'un mot donné était présent dans, ainsi que le nombre d'occurrences dans ce document. Dans votre exemple, comment ferais-je cela? –
Je vais écrire une méthode pour le faire et expliquer comment cela fonctionne –
Je pense que cela va fonctionner. Merci! –