-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 = ...たより簡潔でクリーンなアプローチがあると仮定すると、次のような 2 つのネストされたループになります。

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 に答える