【Java】オブジェクトリストの型変換の実装方法

オブジェクトリストの型変換が必要になりました。単純な型変換の記事は見つかったのですが、オブジェクトリストの型変換の記事は見つけられなかったので、メモとして残しておきます。

# やりたいこと
オブジェクトリストの型変換

String型の「id」「displayOrder」を内包するStringModelオブジェクトがあります。このStringModelオブジェクトをint型のオブジェクトリストに変換します。

# 実装

まず、modelクラスを作成します。
```java:StringModel.java
package com.example.demo.model;

public class StringModel {
	
	private String id;
	
	private String displayOrder;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getDisplayOrder() {
		return displayOrder;
	}

	public void setDisplayOrder(String displayOrder) {
		this.displayOrder = displayOrder;
	}		
}

```

```java:IntModel.java
package com.example.demo.model;

public class IntModel {

	private int id;
	
	private int displayOrder;
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getDisplayOrder() {
		return displayOrder;
	}

	public void setDisplayOrder(int displayOrder) {
		this.displayOrder = displayOrder;
	}
}

```

## 準備　オブジェクトリストの作成
```java
		// String型の値を持つオブジェクトのリストを作成
		StringModel stringModel1 = new StringModel();
		stringModel1.setId("1");
		stringModel1.setDisplayOrder("1");
		
		StringModel stringModel2 = new StringModel();
		stringModel2.setId("2");
		stringModel2.setDisplayOrder("2");
		
		StringModel stringModel3 = new StringModel();
		stringModel3.setId("3");
		stringModel3.setDisplayOrder("3");
		
		List<StringModel> stringModelList = new ArrayList<>();
		stringModelList.add(stringModel1);
		stringModelList.add(stringModel2);
		stringModelList.add(stringModel3);
		
		// 出力
		System.out.println(stringModelList.get(0).getId().getClass().getSimpleName() + " " + stringModelList.get(0).getId());
		System.out.println(stringModelList.get(0).getDisplayOrder().getClass().getSimpleName() + " " + stringModelList.get(0).getDisplayOrder());
		System.out.println(stringModelList.get(1).getId().getClass().getSimpleName() + " " + stringModelList.get(1).getId());
		System.out.println(stringModelList.get(1).getDisplayOrder().getClass().getSimpleName() + " " + stringModelList.get(1).getDisplayOrder());
		System.out.println(stringModelList.get(2).getId().getClass().getSimpleName() + " " + stringModelList.get(2).getId());
		System.out.println(stringModelList.get(2).getDisplayOrder().getClass().getSimpleName() + " " + stringModelList.get(2).getDisplayOrder());
```


```
//出力結果
String 1
String 1
String 2
String 2
String 3
String 3
```
「.getClass().getSimpleName()」で型を確認して出力しました。stringで作成できているようです。


## 型変換（String →int）

```java
		// 型変換
		List<IntModel> intModelList = new ArrayList<>();
		for (int i = 0; i < stringModelList.size(); i++) {
			IntModel intModel = new IntModel();
			intModel.setId(Integer.parseInt(stringModelList.get(i).getId()));
			intModel.setDisplayOrder(Integer.parseInt(stringModelList.get(i).getDisplayOrder()));
			intModelList.add(intModel);
		}
```
型変換の部分です。型変換後、新しいオブジェクト「intModelList」に入れ直しています。ポイントは2つです。
ます、1つ目のポイントは「Integer.parseInt」でint型に変換していることです。「parse~」で型変換できます。こちらの記事に「型変換メソッド一覧」が載っていました。

https://www.sejuku.net/blog/14531

2つ目のポイントは「IntModel intModel = new IntModel();」の書く場所です。for文の中に記載すると思ったような動きになります。最初はfor文の外に記載していたのですが、うまくいきませんでした。最終的にはオブジェクトリストになるので、for文の中に記載が必要でした。

型変換がうまくできているか、確認します。
```java
		// 出力
		System.out.println(((Object)intModelList.get(0).getId()).getClass().getSimpleName() + " " + intModelList.get(0).getId());
		System.out.println(((Object)intModelList.get(0).getDisplayOrder()).getClass().getSimpleName() + " " + intModelList.get(0).getDisplayOrder());
		System.out.println(((Object)intModelList.get(1).getId()).getClass().getSimpleName() + " " + intModelList.get(1).getId());
		System.out.println(((Object)intModelList.get(1).getDisplayOrder()).getClass().getSimpleName() + " " + intModelList.get(1).getDisplayOrder());
		System.out.println(((Object)intModelList.get(2).getId()).getClass().getSimpleName() + " " + intModelList.get(2).getId());
		System.out.println(((Object)intModelList.get(2).getDisplayOrder()).getClass().getSimpleName() + " " + intModelList.get(2).getDisplayOrder());
```

```
//出力結果
Integer 1
Integer 1
Integer 2
Integer 2
Integer 3
Integer 3
```

String型から変換できているようです。ちなみに、「.getClass().getSimpleName()」で、プリミティブデータ型の型を調べるには、Object にキャストする必要があるようです。


＊

型変換の全量はこちらです。
```java:ParseController.java
package com.example.demo.controller;

import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import com.example.demo.model.StringModel;
import com.example.demo.model.IntModel;

@Controller
public class ParseController {

	public static void main(String[] args) {
		
		// String型の値を持つオブジェクトのリストを作成
		StringModel stringModel1 = new StringModel();
		stringModel1.setId("1");
		stringModel1.setDisplayOrder("1");
		
		StringModel stringModel2 = new StringModel();
		stringModel2.setId("2");
		stringModel2.setDisplayOrder("2");
		
		StringModel stringModel3 = new StringModel();
		stringModel3.setId("3");
		stringModel3.setDisplayOrder("3");
		
		List<StringModel> stringModelList = new ArrayList<>();
		stringModelList.add(stringModel1);
		stringModelList.add(stringModel2);
		stringModelList.add(stringModel3);
		
		// 出力
		System.out.println(stringModelList.get(0).getId().getClass().getSimpleName() + " " + stringModelList.get(0).getId());
		System.out.println(stringModelList.get(0).getDisplayOrder().getClass().getSimpleName() + " " + stringModelList.get(0).getDisplayOrder());
		System.out.println(stringModelList.get(1).getId().getClass().getSimpleName() + " " + stringModelList.get(1).getId());
		System.out.println(stringModelList.get(1).getDisplayOrder().getClass().getSimpleName() + " " + stringModelList.get(1).getDisplayOrder());
		System.out.println(stringModelList.get(2).getId().getClass().getSimpleName() + " " + stringModelList.get(2).getId());
		System.out.println(stringModelList.get(2).getDisplayOrder().getClass().getSimpleName() + " " + stringModelList.get(2).getDisplayOrder());
		
		// 型変換
		List<IntModel> intModelList = new ArrayList<>();
		for (int i = 0; i < stringModelList.size(); i++) {
			IntModel intModel = new IntModel();
			intModel.setId(Integer.parseInt(stringModelList.get(i).getId()));
			intModel.setDisplayOrder(Integer.parseInt(stringModelList.get(i).getDisplayOrder()));
			intModelList.add(intModel);
		}
		
		// 出力
		System.out.println(((Object)intModelList.get(0).getId()).getClass().getSimpleName() + " " + intModelList.get(0).getId());
		System.out.println(((Object)intModelList.get(0).getDisplayOrder()).getClass().getSimpleName() + " " + intModelList.get(0).getDisplayOrder());
		System.out.println(((Object)intModelList.get(1).getId()).getClass().getSimpleName() + " " + intModelList.get(1).getId());
		System.out.println(((Object)intModelList.get(1).getDisplayOrder()).getClass().getSimpleName() + " " + intModelList.get(1).getDisplayOrder());
		System.out.println(((Object)intModelList.get(2).getId()).getClass().getSimpleName() + " " + intModelList.get(2).getId());
		System.out.println(((Object)intModelList.get(2).getDisplayOrder()).getClass().getSimpleName() + " " + intModelList.get(2).getDisplayOrder());
	}
}

```

ひとまず、思ったように型変換できました。誰かの役に立ったら嬉しいです。

最後まで読んでいただいた方、ありがとうございました。