以前に書いた基本操作で、内部処理について
1.エディッティング/フォーマッティング
・数字の表現(カンマつき、小数点と桁数、0を前に付けるなど)
・日付、時間の表現
・文字列操作
2.四則演算、計算
3.分類(仕分け)
4.ソート
5.マージ
6.チェッキング
ある項目をチェックし、該当したら表示=>検索
ある項目をチェックし、該当しなかったら表示=>エラー出力
ある項目をチェックし、該当したら一部表示=>選択
ある項目をチェックし、該当したらレコードを合わせる=>Join
とかいたので、これについて、JAVAで、どう書くかを書いていきます。
まずは、4.マージから
■マージとは、その内容と戦略
マージとは、もとのデータに、新しいデータを上書きするというものです。
ただし、もとのデータにない場合は追加します。
これをJavaで実現するには、元のデータと新しいデータをHashMapにいれて、
(キーを、比較する項目にして、値に値全体を入れる)
下のデータに、新しいデータをputすると、putは
存在するデータは上書き
ないデータは追加
してくれるので、上記の内容を満たします。
■マージ:仕様
下のデータは、以下のとおりです
19:00 サイエンスZERO
21:00 NHKニュース
24:00 うるぐす
26:30 平野 麻樹子の地学
このとき、
19:00をバレーボールに置換え
26:00に高校講座化学を追加
します。
その結果を、時間部分をキーにしてソートし、表示します。
■ソースプログラム
全体の流れは、こんなかんじ。
import java.util.*;
/*
* マージのテスト
*/
public class test {
/*
* メイン処理(呼び出し元)
*/
public static void main(String[] args) {
HashMap moto = new HashMap(); // 元のデータ(ここに追加する)
HashMap henko= new HashMap(); // 変更分データ
// 下のデータ
moto.put("19:00","サイエンスZERO");
moto.put("21:00","NHKニュース");
moto.put("24:00","うるぐす");
moto.put("26:30","平野 麻樹子の地学");
// 追加・修正データ
henko.put("19:00","バレーボール");
henko.put("26:00","高校講座化学");
// マージする
Merge.execute(moto,henko);
// 表示する
Object[] key = moto.keySet().toArray();
Arrays.sort(key); // ソートして表示
for(int i = 0 ; i < key.length ; i ++ )
{
System.out.println(key[i] + ":" + moto.get(key[i]));
}
}
}
|
(上記< > ¥は、本当は半角)
まず、moto,henkoのハッシュマップにキーと値をセットします。
今回はどちらもStringでかつキーに重複がないので簡単ですが、
値はStringでなく、Hashtableなどというケースもあります。
重複を許す場合は、Vectorにaddし、そのVectorを値とするような
ケースもあります。
キーが複数(大分類、中分類、小分類)あるケースについて
は、ソートのとき述べます。
そして、マージするプログラム(後述)を呼び出し、
結果をソートして表示します。
で、肝心のマージは、こんなかんじ。
public class Merge {
public static HashMap execute(HashMap motoMap,HashMap addMap)
{
int i;
// 引数チェック
if ( ( motoMap == null ) || ( addMap == null ) )
{
return motoMap;
}
// キーを取得し、配列に入れる
Object[] key = addMap.keySet().toArray();
// 全部、putする
for(i = 0 ; i < key.length ; i ++ )
{
motoMap.put(key[i],addMap.get(key[i]));
}
return motoMap;
}
}
|
(上記< > ¥は、本当は半角)
足しこむハッシュマップ(addMap)のキーをaddMap.keySet().toArray()で取得し、それを
もとに、motoMapに、キーと値をいれていきます。
こんなかんじですかね。。