前提
java8でListのデータを入れなおす処理を作成しています
該当のソースコード
Java
1 2 List<A> CheckedAList = new ArrayList<>(); 3 for (A entityA : entityAList) { 4 List<B> entityBList = A.getEntityBList(); 5 for(B entityB : entityBList) { 6 List<C> entityCList = entityB.getEntityCList(); 7 for(C entityC : entityCList){ 8 List<D> entityDList = entityC.getEntityDList(); 9 10 /* entityDListをMemberCodeの値で絞り込む 11 entityAと同じMemberCodeを持つデータのみを 12 filterdEntityDListに入れる */ 13 List<D> filteredEntityDList = entityDList.stream() 14 .filter(item -> item.getMemberCode().equals(entityA.getMemberCode())) 15 .collect(Collectors.toList()); 16 17 entityC.setEntityDList(filteredEntityDList); 18 } 19 entityB.setEntityCList(entityCList); 20 } 21 entityA.setEntityBList(entityBList); 22 CheckedAList.add(entityA); 23 24 } 25
entityAをCheckedAListにaddした時点ではfilteredEntityDList の内容が反映されていることを確認できているのですがA entityA : entityAListのfor文を回すとfilteredEntityDListのデータがなくなり、entityCが持っているEntityDListがnullになってしまいます。
setメソッドでList内の値を入れなおすことは可能でしょうか?
Java
1@Data 2@AllArgsConstructor 3public class B { 4 private List<C>entityCList; 5 6 public void setEntityCList(List<C> entityCList){ 7 this.entityCList = entityCList; 8 } 9} 10 11 12@Getter 13@ToString 14@EqualsAndHashCode 15@Slf4j 16public class C implements Comparable<C> { 17 private List<D> entityDList; 18 19 public void setEntityDList(List<D> 20 entityDList) { 21 this.entityDList = entityDList; 22 } 23 24}
試したこと
entityA.setEntityBList(entityBList);
の部分をentityAの初期化処理に変えてみましたが同じ結果でした
Java
1 A checkedA = new A(eEntity, fEntity, entityBList, EntityBListInEdge); 2
entityAのクラスファイル
Java
1@Data 2public class A { 3 4 public A( 5 EEntity eEntity, 6 FEntity fEntity, 7 List<B> EntityBList) { 8 this(eEntity, fEntity, EntityBList, Collections.emptyList()); 9 } 10 11 public A( 12 EEntity eEntity, 13 FEntity fEntity, 14 List<B> EntityBList, 15 List<B> EntityBListInEdge) { 16 this.a1 = eEntity.getA1(); 17 this.a2 = eEntity.getA2(); 18 this.a3 = eEntity.getA3(); 19 this.a4 = eEntity.getA4(); 20 this.fentity = fEntity; 21 this.entityBList = entityBList; 22 this.entityBListInEdge = entityBListInEdge; 23 } 24 25}
補足情報(FW/ツールのバージョンなど)
Java8
spring boot 2.6.3
回答1件
あなたの回答
tips
プレビュー