如何通过Stream<String>生成Stream<CustomType>并简化映射样板代码
解决方案
Java 标准库没有内置对应的 Stream 转换 API,你可以自行封装一个通用的转换工具方法,一次编写后所有同类场景都可复用,完全满足你的要求:
- 首先封装通用工具函数,可放在项目公共工具类中:
import java.util.function.Function; import java.util.function.Supplier; import java.util.function.BiConsumer; public class StreamUtils { public static <T, R> Function<T, R> buildBean(Supplier<R> beanSupplier, BiConsumer<R, T> setter) { return value -> { R bean = beanSupplier.get(); setter.accept(bean, value); return bean; }; } }
- 业务代码中直接调用即可,不需要修改原有的
CustomType类,也不用手写实例化样板代码:
import static 你的包名.StreamUtils.buildBean; class Test { public static void main (String... args) { Stream<String> source = Stream.of("A", "B", "C"); Stream<CustomType> result = source.map(buildBean(CustomType::new, CustomType::setId)); } }
如果你的项目已经引入了 Spring、Apache Commons BeanUtils 之类的第三方工具库,也可以直接使用库中提供的对象构造/属性拷贝相关的工具类,和上面的方案逻辑一致,不需要额外自行封装工具函数。
内容的提问来源于stack exchange,提问作者Miy
相关产品推荐
相关产品推荐

