【发布时间】:2018-09-08 06:42:16
【问题描述】:
我有一个带有以下签名的课程Model:
class Model {
private String stringA;
private String stringB;
public Model(String stringA, String stringB) {
this.stringA = stringA;
this.stringB = stringB;
}
public String getStringA() {
return stringA;
}
public String getStringB() {
return stringB;
}
}
我想将 List<Model> 映射到 List<String> 在单个流中同时包含 stringA 和 stringB
List<String> strings = models.stream()
.mapFirst(Model::getStringA)
.thenMap(Model::getStringB)
.collect(Collectors.toList());
或:
List<String> strings = models.stream()
.map(Mapping.and(Model::getStringA,Model::getStringB))
.collect(Collectors.toList());
当然,它们都不能编译,但你明白了。
有没有可能?
编辑:
例子:
Model ab = new Model("A","B");
Model cd = new Model("C","D");
List<String> stringsFromModels = {"A","B","C","D"};
【问题讨论】:
-
当您说“StringA 和 StringB”时,您的意思是串联吗?或者您的
List<String>是否应该在索引0处包含StringA用于您的Model,然后在索引0处包含用于Model的StringB,然后在索引1处包含[...] 和等等? -
A Stream 通常不喜欢增加大小,这不是它通常的行为方式,您可以使用
flatMap实现您想要的,但这将是丑陋的。你有什么理由不想使用传统的for循环? -
@Mena 我的意思是第二种方式,所以
List<String> strings应该包含模型中的每个字符串,包括字符串 A 和字符串 B。我将提供一个例子。 -
@luk2302 这是实际的解决方案,但我想知道是否可以在流中解决它
-
那么答案是“是的,但在性能方面既不会漂亮也不会更好”
标签: java java-8 java-stream