code: public Map<String, V> prefix(@NonNull String prefix) {
        final TrieNode<V> match = root.find(prefix);
        if (match == null) {
           return Collections.emptyMap();
        }
        return new AbstractMap<String, V>() {
           @Override
           public Set<Entry<String, V>> entrySet() {
              return new AbstractSet<Entry<String, V>>() {
                 @Override
                 public Iterator<Entry<String, V>> iterator() {
                    return Iterators.unmodifiableIterator(new EntryIterator<>(match));
                 }
  
                 @Override
                 public int size() {
                    return match.size;
                 }
              };
           }
        };
     }
docs: <p>Returns an unmodifiable map view of this Trie containing only those elements with the given prefix.</p>
  
  @param prefix the prefix to match
  @return A unmodifiable map view of the trie whose elements have the given prefix