code: public Iterable<V> values() {
      return new Iterable<V>() {
        @Override
        public Iterator<V> iterator() {
          return new Iterator<V>() {
            final Iterator<List<V>> valuesIterator = map.values().iterator();
            Iterator<V> current;
  
            {
              if (valuesIterator.hasNext())
                current = valuesIterator.next().iterator();
            }
  
            @Override
            public boolean hasNext() {
              return current != null && current.hasNext();
            }
  
            @Override
            public V next() {
              V value = current.next();
              while (!current.hasNext() && valuesIterator.hasNext())
                current = valuesIterator.next().iterator();
              return value;
            }
  
            @Override
            public void remove() {
              throw new UnsupportedOperationException();
            }
          };
        }
      };
    }
docs: Returns an iterable over the multimap's values. Unsafe for concurrent modification.