内部类的平面图

时间:2016-04-12 09:06:54

标签: java java-8 flatmap

我有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;
}

1 个答案:

答案 0 :(得分: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());