guava/src/com/google/common/collect/FluentIterable.java
public final <V> ImmutableMap<E, V> toMap(Function<? super E, V> valueFunction) {
    return Maps.toMap(getDelegate(), valueFunction);
  }
public final <V> ImmutableMap<E, V> toMap(Function<? super E, V> valueFunction) {
    return Maps.toMap(getDelegate(), valueFunction);
  }
Returns an immutable map whose keys are the distinct elements of this {@code FluentIterable}
and whose value for each key was computed by {@code valueFunction}. The map's iteration order
is the order of the first appearance of each key in this iterable.

<p>When there are multiple instances of a key in this iterable, it is unspecified whether
{@code valueFunction} will be applied to more than one instance of that key and, if it is,
which result will be mapped to that key in the returned map.

<p><b>{@code Stream} equivalent:</b> {@code stream.collect(ImmutableMap.toImmutableMap(k -> k,
valueFunction))}.

@throws NullPointerException if any element of this iterable is {@code null}, or if {@code
valueFunction} produces {@code null} for any key
@since 14.0