使用 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。這避免了建立中間集合的開銷。