Java 8 Stream:如何将PolicyDefinition的别名与名称合并为单列表?
优雅合并PolicyDefinition的别名与名称到单个列表
嗨,刚上手Java 8和Stream完全不用慌,这事儿用一条Stream语句就能搞定,核心就是用flatMap——它能帮你把每个对象拆成多个元素再合并成一个流,完美适配你的需求!
直接上代码:
import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; // 假设你已经有PolicyDefinition集合List<PolicyDefinition> policyDefinitions List<String> combinedAliasAndNames = policyDefinitions.stream() // 把每个PolicyDefinition转换成包含alias和name的Stream .flatMap(policyDef -> Stream.of(policyDef.getAlias(), policyDef.getName())) // 收集成最终的列表 .collect(Collectors.toList());
简单解释下:
flatMap和map的区别在于,map是把一个元素转换成另一个元素,而flatMap是把一个元素转换成多个元素组成的流,然后会自动把所有这些小流合并成一个连续的流。- 这里我们用
Stream.of()把每个PolicyDefinition的alias和name打包成一个包含两个元素的小流,flatMap会把所有这些小流“铺平”成一个大的字符串流,最后收集成List就搞定了。
如果担心alias或name可能返回null,还可以加个过滤步骤,避免列表里出现null值:
import java.util.Objects; List<String> combinedAliasAndNames = policyDefinitions.stream() .flatMap(policyDef -> Stream.of(policyDef.getAlias(), policyDef.getName()) .filter(Objects::nonNull)) // 过滤掉null值 .collect(Collectors.toList());
这样就完全不用分两条语句啦,一条搞定,既简洁又符合Stream的风格~
内容的提问来源于stack exchange,提问作者nadavgam
相关产品推荐
相关产品推荐

