I like the idea that a Multimap is just a Map\<K, Iterable\<V>>. All of the operations work, with the addition of a few that make the iterables easier to work with like add(), and addAll(). values could be renamed allValues to fit that pattern. Also toMap() being unmodifiable means that you have to copy if you want to pass this collection to a function that expects a Map and modifies it. Not sure if that will be common, but because this isn't in the core libs, it certainly could be.