使用 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
。这避免了创建中间集合的开销。