public Lexicon(final Iterable<? extends T> lexemes) {
final ImmutableMap.Builder<String, T> idBuilder = ImmutableMap.builder();
final ImmutableMultimap.Builder<String, T> lemmaBuilder = ImmutableMultimap.builder();
final ImmutableMultimap.Builder<String, T> stemBuilder = ImmutableMultimap.builder();
for (final T lexeme : Ordering.natural().immutableSortedCopy(lexemes)) {
idBuilder.put(lexeme.getId(), lexeme);
for (final Token token : lexeme.getTokens()) {
if (token.getLemma() != null) {
lemmaBuilder.put(token.getLemma(), lexeme);
}
if (token.getStem() != null) {
stemBuilder.put(token.getStem(), lexeme);
}
}
}
this.idIndex = idBuilder.build();
this.lemmaIndex = lemmaBuilder.build();
this.stemIndex = stemBuilder.build();
}