こんにちは、本日の学習内容・・・
先日気象庁が提供している天気予報XMLのデータバインドまで終了しました。
XMLの階層構造をpublicのクラスで模擬して取得するやり方ですが。。。
本日はその無駄の多いデータを整理して使えるようにしました。
これがもととなっているXMLです。
ほしいデータは日付と天気とここには写りきらなかった地域名です。
全てまとめて1つのデータとして扱いたいのでMap<Integer,Map<LocalDate,String>>とすることにしました(Integerは地域名を数字に変換したものを使用しています)
無理やり感がすごいですが。。
//バインドクラスの必要な情報が格納している共通の親要素を取得
MeteorologicalInfos meteorologicalInfos = report.block().
getBody().getMeteorologicalInfos().get(0);
//地域,<日付,天気>のマップを生成
Map<Integer, Map<LocalDate, String>> weatherMap =
new HashMap<>();
//バインドされた日付とitemを取得
List<LocalDate> wholeLocalDates = report.block()
.getTimeDefine();
List<Item> itemList = meteorologicalInfos
.getTimeSeriesInfo().getItem();
itemList.stream().forEach(item -> {
Map<LocalDate, String> dateByWeather =
new HashMap<>();
List<String> weatherList = item.getWeatherList();
Integer areaNum = changeAreaForInt(item.getArea()
.getName());
for (int i = 0; i < wholeLocalDates.size(); i++) {
LocalDate localDate = wholeLocalDates.get(i);
String weather = weatherList.get(i);
dateByWeather.put(localDate, weather);
}
weatherMap.put(areaNum, dateByWeather);
});
これをHTMLに渡して問題なく扱えるようにできました。
ようやくアプリが進みそうです。
明日はGitHubの使い方を学んで、別のPCでも作業ができるようにしたいと思います。
今は、デスクトップを使っているんですが別の場所でやると新鮮な気分で取り組むことができると思ったからです。