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

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

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

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

Q&A

1回答

1650閲覧

Listでの実装のヒントをお願いします。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2015/11/19 00:17

編集2015/11/19 01:23

今、家族情報を取得させるようなシステムを大学でやっているのですが
処理を行ってスキップフラグが立ってない場合に以下の処理を行うようにしています。
getOyakoDouiの戻り値の型はList<ECDENna0301CsvKoBean>になっています。

今、getOyakoDoui内でやっている処理とは別の条件で同じ項目を取得させる内容を追加するようにする予定です。
この場合、戻り値の型は変えないようにして作りたいと考えています。ほかでも使用しているので影響がでかいため。
ここに追加するとしたら、どのような実装が一番よいでしょうか?
また、新しい条件の処理で取得した結果は前の条件で取得したものと子供のIDがかぶらない場合に最初の条件で取得したListまたは別でMapを使えるのでしたらそちらを宣言しMapに最初のListと次のListの値を追加するようにしたいと思っています。

if(skipF==0){
// 処理結果をCSV出力リストに追加
csvList = nna03Bl.getOyakoDoui(csvList,errorList);
if(csvList.isEmpty()) {

// スキップフラグを立てる skipF=1; iResult=ECDEZzcParamConst.EC_WARNING; } }

getOyakoDouiの中身

// 検索に使用する値を格納
List<String> condList = new ArrayList<String>();

//子供のID取得 for(ECDENna0301CsvKoBean record:csvList){ condList.add(record.getChildEcId()); } // SQL文の整形(検索条件と結合) String sqlPath = ECDEZzcOpeEnvAccess.getSqlFileRootPath() + ECDENna0301Const.SQLFILE_PATH + ECDENna0301Const.SQLFILE_SELECT_OYAKO_DOUI; // SQL文の整形(inの中身を整形("?"の数を揃える)) String strSql = FormatSql(condList,sqlPath); // 検索 List<Map<String, String>> list = this.selectWrapperListMap(strSql, condList);

//取得件数が0件なら戻す
if(list.size()==0){

// 0の場合の処理 csvList = sqlSizeZero(csvList,ECDENna0301Const.SQLFILE_SELECT_OYAKO_DOUI,errorList,ERROR_LIST_SCHOSA_OYAKODOUI); return csvList; } // 対象者分繰り返す for(int cntCsv=0;cntCsv<csvList.size();cntCsv++){ ECDENna0301CsvKoBean koBean = csvList.get(cntCsv); // 検索結果分繰り返す for(int cnt=0;cnt<list.size();cnt++){ Map<String, String> mapOyako = list.get(cnt); // 対象者のIDと取得したIDを比較 if(koBean.getChildEcId().equals(mapOyako.get(ECDENna0301Const.DOUI_KO_ECID))){ List<ECDENna0301CsvOyaBean> listOyaBean = koBean.getListOyaInfo(); ECDENna0301CsvOyaBean oyaBean = new ECDENna0301CsvOyaBean(); //子供ID の取得 oyaBean.setKoEcId(mapOyako.get(ECDENna0301Const.DOUI_KO_ECID)); //母ID の取得 oyaBean.setOyaEcId(mapOyako.get(ECDENna0301Const.DOUI_OYA_ECID)); //母ID(エンティティ) の取得 oyaBean.setOyaEcIdEntity(mapOyako.get(ECDENna0301Const.DOUI_OYA_ENTITY_ECID)); listOyaBean.add(oyaBean); koBean.setListOyaInfo(listOyaBean); // 格納完了したので、検索結果から削除 list.remove(cnt--); } } // 親子関係情報が取得できなかった子どものレコードは、削除 if(null==koBean.getListOyaInfo() || 0==koBean.getListOyaInfo().size()){ csvList.remove(cntCsv--); //エラーファイルに出力 putErrorMap(errorList,koBean.getChildEcId(),koBean.getSchosa_UniqId(),ERROR_LIST_SCHOSA_OYAKODOUI); //ログ logger.warn(ECDEZzcMessageEnum.WARNING_MESSAGE.NA03_MSG_WRN02, koBean.getChildEcId(),"HD37"); } }

すべてを教えてもらっては自分の身にもならないので、こうするといいかもというヒントなどを頂けたらと思っています。

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

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

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

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

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

swordone

2015/11/19 01:31

それぞれのデータ構造もよくわからないので、どれが何を意味しているかもよくわかりません。"OyakoDoui"も「親子同意」?なのか、意味がわからないのでもう少し説明を加えて欲しいです。
guest

回答1

0

一番良い方法かどうかは分かりませんが、getOyakoDouiメソッドと新規で追加するメソッドで同じ処理の部分と違う処理の部分を整理して共通で使用できるメソッドを作成すれば良いと思います。

Java

1/** 2 * 3 */ 4List<ECDENna0301CsvKoBean> getOyakoDoui() { 5 // ============================= 6 // getOyakoDouiメソッド固有の処理を記述 7 // ============================= 8 9 // 共通処理を実行 10 List<ECDENna0301CsvKoBean> list = kyotuSyori(); 11 return list; 12} 13 14/** 15 * 16 */ 17List<ECDENna0301CsvKoBean> getXxxxxxxx() { 18 // ============================= 19 // getXxxxxxxxメソッド固有の処理を記述 20 // ============================= 21 22 // 共通処理を実行 23 List<ECDENna0301CsvKoBean> list = kyotuSyori(); 24 return list; 25} 26 27/** 28 * 引数は共通で行える処理に必要となるものを指定してください 29 */ 30List<ECDENna0301CsvKoBean> kyotuSyori() { 31 // ============================= 32 // 共通で行える処理を記述 33 // ============================= 34 List<ECDENna0301CsvKoBean> list = new ArrayList<ECDENna0301CsvKoBean>(); 35 return list; 36}

Listのマージ方法については以前のご質問で回答させていただいた内容を参考にして頂ければできるはずです。
https://teratail.com/questions/20277

投稿2015/11/19 01:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2015/11/19 02:08

ありがとうございます。 参考にさせていただきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問