使用 Map.Entry 的流在映射后保留初始值

如果你有 Stream 你需要映射但是也想保留初始值,你可以使用如下的实用方法将 Stream 映射到 Map.Entry<K,V>

public static <K, V> Function<K, Map.Entry<K, V>> entryMapper(Function<K, V> mapper){
    return (k)->new AbstractMap.SimpleEntry<>(k, mapper.apply(k));
}

然后,你可以使用转换器处理可以访问原始值和映射值的 Stream

Set<K> mySet;
Function<K, V> transformer = SomeClass::transformerMethod;
Stream<Map.Entry<K, V>> entryStream = mySet.stream()
    .map(entryMapper(transformer));

然后,你可以继续正常处理 Stream。这避免了创建中间集合的开销。