我有一个带有以下签名的类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>到列表< 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"};
解决方法
您可以一个接一个地列出所有值,如下所示:
- List<String> resultSet =
- modelList.stream()
- .flatMap(e -> Stream.of(e.getStringA(),e.getStringB()))
- .collect(Collectors.toList());
传递给flatMap的函数将应用于每个元素,从而产生Stream< String>.这里需要使用flatMap来折叠所有嵌套的Stream< Stream< String>>到一个流< String>因此,我们可以将元素收集到List< String>中.