【8/31まで 今季最大のセール開催中!】Udemyの人気コースが今なら1,200円から!!

【Java入門】Listの中にListを入れる(Listの入れ子構造)

【Java入門】Listの中にListを入れる(Listの入れ子構造)

この記事では、Listの中にListを入れる方法について解説しています。
もし、この記事の内容がちょっとでも難しいなと思ったら、まずは以下の記事を読んでみてください。

完成図

先に、これから作るロジックの完成イメージ図を載せます。

Listの中にListを入れるイメージ

【解説】
クラス「MasterDataList」は複数のデータクラスを管理するためのクラスです。
クラス「vegetableData」は、野菜の情報を格納するためのクラスです。
クラス「fruitsData」は、果物の情報を格納するためのクラスです。

作り方

1.子データクラスを作る。

図中のvegetableDataクラスとfruitsDataクラスを作ります。
クラス内に以下を用意します。

  • メンバ変数name,value.flg
  • 上記のセッター/ゲッター
  • 値確認用のOverrideしたtoString()メソッド

以下は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;
    }
}

2.子データクラス格納用の親データクラスを作る。

図中の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;
    }
}

3.データの生成・格納・出力

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がオススメ!同僚に差をつけよう!

3 COMMENTS

佐藤こうき

2の子クラス格納用の親クラスを作るで、ではlistでではfruitsInfoをローカル変数としているのですか?

返信する
佐藤こうき

2の子クラス格納用の親クラスを作るで、ベジタブルではローカル変数がlistでフルーツではfruitsInfoなのはなぜですか?
this.vegeInfo=vegeInfo;ではだめなのですか?

返信する
管理人

返信が遅れました。片方がlistで片方がfruitsInfoになってしまったのは特に意図はありません。
コーディングしたときに書き方を統一していなかったためだと思われます。
記事は以下のようにlistで修正いたしました。
this.vegeInfo = list;
this.fruitsInfo = list;

返信する

佐藤こうき へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です