-2

我有一个class. 我想获取将包含所有这些参数的对象列表。现在我正在用 foreach 做这件事。有没有办法做到这一点flatMap

public class A{
  String parA;
  List<B> parB;

  public static class B{
    String parC;
    String parD;
    List<C> parE;
  }

  public static class C{
    String parF;
    String parG;
    String parH;
    String parJ;
  }
} 

我想要对象列表:

public class Out{
  String parA;
  String parC;
  String parD;
  String parF;
  String parG;
  String parH;
  String parJ;
}
4

1 回答 1

2

假设您有一个给定A a = ...的更简洁和干净的方法将是两个嵌套循环,例如:

List<Out> list = new ArrayList<>();
for (B b : a.parB) {
  for (C c : b.parE) {
    list.add(new Out(a.parA, b.parC, b.parD, c.parF, c.parG, c.parH, c.parJ));
  }
}

既然你在这里要求Stream解决方案,你就去:

List<Out> list = Stream.of(a).flatMap(aa -> 
  aa.parB.stream().flatMap(bb -> 
    bb.parE.stream().map(cc -> 
      new Out(aa.parA, bb.parC, bb.parD, cc.parF, cc.parG, cc.parH, cc.parJ))
  )
).collect(Collectors.toList());
于 2016-04-12T11:15:42.483 回答