この記事では、Listの中にListを入れる方法について解説しています。
もし、この記事の内容がちょっとでも難しいなと思ったら、まずは以下の記事を読んでみてください。
先に、これから作るロジックの完成イメージ図を載せます。
【解説】
クラス「MasterDataList」は複数のデータクラスを管理するためのクラスです。
クラス「vegetableData」は、野菜の情報を格納するためのクラスです。
クラス「fruitsData」は、果物の情報を格納するためのクラスです。
図中のvegetableDataクラスとfruitsDataクラスを作ります。
クラス内に以下を用意します。
以下はvegetableDataクラスの例です。(これと同じ要領でfruitsDataクラスも作ります。)
Java
public class vegetableData{
private String name;
private int value;
private boolean flg;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public boolean isFlg() {
return flg;
}
public void setFlg(boolean flg) {
this.flg = flg;
}
@Override
public String toString(){
return name + "," + value + "," + flg;
}
}
図中のvegetableDataとfruitsDataのList型を格納するためのクラス「MasterDataList」を作ります。
中身としてメンバ変数vegeInfoとfruitsInfoをList型で定義し、セッター/ゲッターを用意します。
Java
public class MasterDataList{
public List<vegetableData> vegeInfo;
public List<fruitsData> fruitsInfo;
public List<vegetableData> getVegeInfo() {
return vegeInfo;
}
public void setVegeInfo(List<vegetableData> list) {
this.vegeInfo = list;
}
public List<fruitsData> getFruitsInfo() {
return fruitsInfo;
}
public void setFruitsInfo(List<fruitsData> list) {
this.fruitsInfo = list;
}
}
Java
public static void main(String[] args) {
List<MasterDataList> MstList = new ArrayList<MasterDataList>();
MasterDataList Mdata;
//以下vegetableDataの編集--------------------------------------
List<vegetableData> list;
vegetableData data;
//1件目のListを生成
Mdata = new MasterDataList();
list = new ArrayList<vegetableData>();
data = new vegetableData();
data.setName("玉ねぎ");
data.setValue(30);
data.setFlg(true);
list.add(data);
data = new vegetableData();
data.setName("人参");
data.setValue(100);
data.setFlg(true);
list.add(data);
data = new vegetableData();
data.setName("じゃがいも");
data.setValue(50);
data.setFlg(true);
list.add(data);
//1件目のListを格納
Mdata.setVegeInfo(list);
MstList.add(Mdata);
//2件目のListを生成
Mdata = new MasterDataList();
list = new ArrayList<vegetableData>();
data = new vegetableData();
data.setName("大根");
data.setValue(100);
data.setFlg(true);
list.add(data);
data = new vegetableData();
data.setName("白菜");
data.setValue(200);
data.setFlg(true);
list.add(data);
data = new vegetableData();
data.setName("きゅうり");
data.setValue(30);
data.setFlg(true);
list.add(data);
//2件目のListを格納
Mdata.setVegeInfo(list);
MstList.add(Mdata);
//以下fruitsDataの編集--------------------------------------
List<fruitsData> list2;
fruitsData data2;
//3件目のListを生成
Mdata = new MasterDataList();
list2 = new ArrayList<fruitsData>();
data2 = new fruitsData();
data2.setName("バナナ");
data2.setValue(100);
data2.setFlg(true);
list2.add(data2);
data2 = new fruitsData();
data2.setName("レモン");
data2.setValue(150);
data2.setFlg(true);
list2.add(data2);
data2 = new fruitsData();
data2.setName("リンゴ");
data2.setValue(200);
data2.setFlg(true);
list2.add(data2);
//3件目のListを格納
Mdata.setFruitsInfo(list2);
MstList.add(Mdata);
//以下、出力結果--------------------------------------
System.out.println(MstList.get(0).getVegeInfo());//1件目のListを出力
System.out.println(MstList.get(1).getVegeInfo());//2件目のListを出力
System.out.println(MstList.get(2).getFruitsInfo());//3件目のListを出力
}
実行結果は以下のとおりです。
Java
[玉ねぎ,30,true, 人参,100,true, じゃがいも,50,true]
[大根,100,true, 白菜,200,true, きゅうり,30,true]
[バナナ,100,true, レモン,150,true, リンゴ,200,true]
なんかいろいろ応用できそうです。
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!
View Comments
2の子クラス格納用の親クラスを作るで、ではlistでではfruitsInfoをローカル変数としているのですか?
2の子クラス格納用の親クラスを作るで、ベジタブルではローカル変数がlistでフルーツではfruitsInfoなのはなぜですか?
this.vegeInfo=vegeInfo;ではだめなのですか?
返信が遅れました。片方がlistで片方がfruitsInfoになってしまったのは特に意図はありません。
コーディングしたときに書き方を統一していなかったためだと思われます。
記事は以下のようにlistで修正いたしました。
this.vegeInfo = list;
this.fruitsInfo = list;