Java8:Stream在同一个流中映射两个属性

前端之家收集整理的这篇文章主要介绍了Java8:Stream在同一个流中映射两个属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有以下签名的类Model:
  1. class Model {
  2. private String stringA;
  3. private String stringB;
  4.  
  5. public Model(String stringA,String stringB) {
  6. this.stringA = stringA;
  7. this.stringB = stringB;
  8. }
  9.  
  10. public String getStringA() {
  11. return stringA;
  12. }
  13.  
  14. public String getStringB() {
  15. return stringB;
  16. }
  17. }

我想映射List< Model>到列表< String>在单个流中包含stringA和stringB

  1. List<String> strings = models.stream()
  2. .mapFirst(Model::getStringA)
  3. .thenMap(Model::getStringB)
  4. .collect(Collectors.toList());

要么:

  1. List<String> strings = models.stream()
  2. .map(Mapping.and(Model::getStringA,Model::getStringB))
  3. .collect(Collectors.toList());

当然,他们都没有编译,但你明白了.

它有可能吗?

编辑:

例:

  1. Model ab = new Model("A","B");
  2. Model cd = new Model("C","D");
  3. List<String> stringsFromModels = {"A","B","C","D"};

解决方法

您可以一个接一个地列出所有值,如下所示:
  1. List<String> resultSet =
  2. modelList.stream()
  3. .flatMap(e -> Stream.of(e.getStringA(),e.getStringB()))
  4. .collect(Collectors.toList());

传递给flatMap的函数将应用于每个元素,从而产生Stream< String>.这里需要使用flatMap来折叠所有嵌套的Stream< Stream< String>>到一个流< String>因此,我们可以将元素收集到List< String>中.

猜你在找的Java相关文章