はじめに
私は、
〜2013年3月 文系大学学部卒
〜2018年4月 インフラ系のSIer # LinuxとかAzureとか
2018年5月〜 WEB系エンジニア # 開発できるようになりたかった
という変遷をたどり、
絶賛業務でJava勉強中の身です。
開発のやり方が学べたら
フルスタックなスキルを身につけられるように頑張りたいと思ってます。
だいぶ初心者な記載が多いかもしれませんが、ご了承ください。
やりたかったこと
クローリングして取ってきた情報を加工し、
複数のテーブルにインサートを行う処理を
①共通のMapを作成し、情報を入れる
②Aテーブル用のMapを作成し、①のMapを入れ、Aテーブル用のMapを加工しAテーブルにインサート
③Bテーブル用のMapを作成し、①のMapを入れ、Bテーブル用のMapを加工しBテーブルにインサート
ということがやりたかった
やったこと(失敗)
下記メソッドを実行して
public void putMain() {
Map<String, Object> insertData = new HashMap<>();
insertData.put("aaa","aaa");
insertData.put("bbb","bbb");
insertData.put("ccc","ccc");
putA(insertData);
putB(insertData);
}
public void putA(Map<String, Object> insertData) {
Map<String, Object> aData = new HashMap<>();
aData = insertData;
aData.remove("bbb");
insert(aData);
}
public void putB(Map<String, Object> insertData) {
Map<String, Object> bData = new HashMap<>();
bData = insertData;
bData.remove("aaa");
insert(bData);
}
期待した結果
| insertData | aData | bData |
|---|---|---|
| aaa | aaa | |
| bbb | bbb | |
| ccc | ccc | ccc |
実際の結果
| insertData | aData | bData |
|---|---|---|
| aaa | ||
| ccc | ccc | ccc |
というように
共通テーブルの内容が変更されてしまった。
直したこと(成功)
public void putMain() {
Map<String, Object> insertData = new HashMap<>();
insertData.put("aaa","aaa");
insertData.put("bbb","bbb");
insertData.put("ccc","ccc");
putA(insertData);
putB(insertData);
}
public void putA(Map<String, Object> insertData) {
Map<String, Object> aData = new HashMap<>(insertData);
aData.remove("bbb");
insert(aData);
}
public void putB(Map<String, Object> insertData) {
Map<String, Object> bData = new HashMap<>(insertData);
bData.remove("aaa");
insert(bData);
}
xDataの宣言後に代入するのではなく、
xDataの宣言をするときに、引数でinsertDataを与えてあげたら
期待通りの動きになった。
終わりに
なぜそうなのかはまだ勉強できていないので、わかってはいません。。。
先輩教えてください><