4
2

More than 5 years have passed since last update.

MapのリストからCSV出力する場合にnullを空文字に変換するーjava8ー

Last updated at Posted at 2015-09-14

概要

StreamAPIを使って、csv出力をした時のメモ
・ヘッダー項目からMapにアクセスして出力データを取得する、必ず値が存在するわけではない
・ヘッダー項目を定数定義により可変にしている

実装

変数定義とか

java
List<Map<String, String>> items = new ArrayList<>();
String[] header = {"福岡", "佐賀", "長崎", "熊本", "大分", "宮崎", "鹿児島"};

データ

Map<String, String> item1 = new HashMap<>();
item1.put("福岡", "100");
item1.put("佐賀", "200");
item1.put("長崎", "300");
item1.put("大分", "10");
item1.put("宮崎", "20");
item1.put("鹿児島", "30");
item1.put("熊本", "40");
item1.put("沖縄", "70");
items.add(item1);

Map<String, String> item2 = new HashMap<>();
item2.put("佐賀", "800000");
item2.put("大分", "1200000");
item2.put("宮崎", "1100000");
item2.put("熊本", "1800000");
item2.put("福岡", "5000000");
item2.put("長崎", "1400000");
item2.put("鹿児島", "1700000");
item2.put("沖縄", "1400000");
items.add(item2);


Map<String, String> item3 = new HashMap<>();
item3.put("鹿児島", "かごしま");
item3.put("長崎", "ながさき");
item3.put("福岡", "ふくおか");
item3.put("宮崎", "みやざき");
item3.put("佐賀", "さが");
item3.put("沖縄", "おきなわ");
items.add(item3);

出力時

java
    File file = new File("d:/test.csv");
    try (PrintWriter writer = new PrintWriter(file)) {
        // ヘッダ出力
        writer.println(Arrays.stream(header).collect(Collectors.joining(",")));
        // データ出力
        for (Map<String, String> item : items) {
            writer.println(Arrays.stream(header)
                            .map(m -> Optional.ofNullable(item.get(m)).orElse(""))
                            .collect(Collectors.joining(",")));
        }
        writer.flush();
    }

出力結果

test.csv
福岡,佐賀,長崎,熊本,大分,宮崎,鹿児島
100,200,300,40,10,20,30
5000000,800000,1400000,1800000,1200000,1100000,1700000
ふくおか,さが,ながさき,,,みやざき,かごしま

ポイント

.mapでOptionalを使い、値が存在しない時に空文字を出力するようにする。
  Optional.ofNullable(item.get(m)) → nullを許容するOptionalを生成する。
  .orElse("") → nullの場合に空文字を返すようにする。
あとは通常通り、.collect(Collectors.joining(","))でカンマ区切りに連結する。

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2