【Java】コレクション ~ List編 / List ⇔ 配列に変換するには ~

  ■ List <=> 配列に変換するには

// List => 配列
List<SampleClass> list1 = new ArrayList<>();
SampleClass[] classes = list1.toArray(new SampleClass[list1.size()]);

// 配列 => List
SampleClass[] samples = new SampleClass[3];
List<SampleClass> list2 = Arrays.asList(samples);

 

  ■ 使用上の注意

 ★重要★ Arrays.asList で作った List に対して add した際にExceptionが発生する可能性がある
 詳細は、以下の関連記事を参照のこと。
http://blogs.yahoo.co.jp/dk521123/33322677.html

  参考文献

http://javatechnology.net/java/array-list/

 

  ■ サンプル

 * ジェネリックを使って、変換処理を共通化
http://blogs.yahoo.co.jp/dk521123/32099558.html
 * 以下のサイトが役立った。多謝。
http://d.hatena.ne.jp/srkzhr/20090926/1253938374

  SampleClass.java

配列/Listで使用するサンプル・オプジェクト
import java.util.Calendar;

public class SampleClass {
  public long id;
  public String name;
  public Calendar dateTime;
  
  public SampleClass(long id, String name, Calendar dateTime) {
    this.id = id;
    this.name = name;
    this.dateTime = dateTime;
  }
}

  Converter.java

import java.lang.reflect.Array;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;

public class Converter {

  public static void main(String[] args) {
    SampleClass sample1 = new SampleClass(1L, "Mike", Calendar.getInstance());
    SampleClass sample2 = new SampleClass(2L, "Tom", Calendar.getInstance());
    SampleClass sample3 = new SampleClass(3L, "Smith", Calendar.getInstance());

    List<SampleClass> sampleClazz = new ArrayList<SampleClass>() {
      {
        add(sample1);
        add(sample2);
        add(sample3);
      }
    };
    
    SampleClass[] resultArrayClazz = Converter.toArray(sampleClazz);
    
    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
    for (SampleClass result : resultArrayClazz) {
      System.out.println("ID : " + result.id);
      System.out.println("Name : " + result.name);
      System.out.println("DateTime : " +  dateFormatter.format(result.dateTime.getTime()));
    }
    
    System.out.println("************************");
    
    List<SampleClass> resultListClazz = Converter.toList(resultArrayClazz);
    
    for (SampleClass result : resultListClazz) {
      System.out.println("ID : " + result.id);
      System.out.println("Name : " + result.name);
      System.out.println("DateTime : " +  dateFormatter.format(result.dateTime.getTime()));
    }
 
  }

  @SuppressWarnings("unchecked")
  public static <T> T[] toArray(List<T> targetValues) {
    if (targetValues == null || targetValues.size() <= 0) {
      return null;
    }

    Class<?> targetClazz = targetValues.get(0).getClass();
    T[] returnValues = (T[]) Array.newInstance(targetClazz, targetValues.size());
    int i = 0;
    for (T value : targetValues) {
      returnValues[i] = value;
      i++;
    }
    return returnValues;
  }

  public static <T> List<T> toList(T[] targetValues) {
    if (targetValues == null) {
      Collections.emptyList()
    }

    return Arrays.asList(targetValues);
  }
}

  出力結果

ID : 1
Name : Mike
DateTime : 2016/07/13 22:07:56.136
ID : 2
Name : Tom
DateTime : 2016/07/13 22:07:56.163
ID : 3
Name : Smith
DateTime : 2016/07/13 22:07:56.163
************************
ID : 1
Name : Mike
DateTime : 2016/07/13 22:07:56.136
ID : 2
Name : Tom
DateTime : 2016/07/13 22:07:56.163
ID : 3
Name : Smith
DateTime : 2016/07/13 22:07:56.163

 

  関連記事

  配列 に関するあれこれ

http://blogs.yahoo.co.jp/dk521123/34123527.html

  コレクション ~ List 編~

http://blogs.yahoo.co.jp/dk521123/32156111.html