質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

462閲覧

HashMap備忘録1

pilepierce

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/08/03 09:52

編集2017/08/03 10:00

###前提・実現したいこと
SQLから取得した情報をHashMapを使ってデータ整形したい。

###発生している問題・エラーメッセージ
HashMap<String,String[]>でputするときkeyが異なるはずだが
全てのValueが上書きされてしまう。

###該当のソースコード

String Result = executeInfo.toString();
String[] List = new String[12];

Map<String, String[]> Map = new HashMap<String, String[]>();
String[] matchList = null;

String KeyInfo = null;
String keyAddress = null;
String keyWebId = null;

String[] Recs = StringUtil.extractArrayString(Result, "\n"); //SQLから取得

for(String rec : Recs) {

String[] Columns = StringUtil.extractArrayString(rec, "\t"); //SQLから取得 keyWebId = resultSqlMailList[RESULT_SQL_WEBSITE_ID]; //SQLから取得 for(int i=0; i<3; i++) { keyAddress = Columns[i+1]; // SQLから取得 if(StringUtil.isNull(keyAddress)) { continue; } matchList = Map.get(KeyInfo); if(Map.containsKey(KeyInfo)) { Map.put(KeyInfo, List); } } // End for

} // End for
// 出力データ整形
for (String[] resultCol : Map.values()) {
result.append(resultCol);
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Value値を更新する場合、ループの外で変数宣言を行ってはいけない。
登録・更新する前で新規メンバ変数を作成しなければいけない

・・・・・・
for(~~~~
・・・・・・
if(Map.containsKey(KeyInfo)) {

String[] newList = ListなりmatchList なり登録・更新したいValue値
Map.put(KeyInfo, List);
}

投稿2017/08/03 10:07

pilepierce

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2017/08/03 10:10

Javaの変数名はlowerCamelCaseにするのが原則です。 KeyInfoじゃなくてkeyInfoの方がいいと思いますよ。 MapとかListとか、一見独自クラスにしか見えないです。
swordone

2017/08/03 14:28

「ループの外で変数宣言を行っている」ことが問題なのではなく、本質は「配列という参照型の扱いの不備」です。
pilepierce

2017/08/03 17:27

LouiS0616さん ご指摘ありがとうございます。 他の変数名はできているのでこういう凡ミスを無くしていきたいです・・。 命名センスが皆無なのも色んなソース見て直していきたいです。
pilepierce

2017/08/03 17:37

swordoneさん http://qiita.com/mdstoy/items/2ef4ada6f88341466783 こういうことですかね もともとC++からやっていたので確かに参照渡しがなんたるかを理解しきれていないところはありました。 インスタンス生成をすることの重要性を肝に銘じて取り組んでいきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問