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

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

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

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

Q&A

1回答

2013閲覧

Java DBの結果を画面表示用にDTOに変換する

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2020/08/22 08:40

編集2020/08/22 09:28

下記コードのDBからの検索結果パラメータのresultListがあり、
1レコードに日付・項目・金額
が入っており画像の場合6レコードがresultListに入っております。
画像のように日付ごとに金額と項目をを表示させたい場合はどのように
プログラムを書くべきか教えていただきたいです。

現状の一つめのコードはreturn時には1つの日付に1つ項目と1つの金額のみ入ってる状態です。
dto.setKoumokuで上書きされてるためだと思いますが。

二つ目のコードのほうがやりたいことには近いような気がしてます。

//DTOクラスの項目と金額のフィールドはString型のコード public List<KakeiboDto> setDto(List<Kakeibo> resultList) { List<KakeiboDto> DtoList = new ArrayList<KakeiboDto>(); KakeiboDto dto = new KakeiboDto(); String strDate= String.valueOf(resultList.get(0).getDate()); dto.setDate(strDate); for(Kakeibo entity : resultList) { //date 違う日付がある場合(8/16から8/18に切り替わるタイミング) if(!strDate.equals(String.valueOf(entity.getDate()))) { DtoList.add(dto); dto = new KakeiboDto(); dto.setDate(String.valueOf(entity.getDate())); strDate=String.valueOf(entity.getDate()); } dto.setKoumoku(entity.getKoumoku()); dto.setKingaku(entity.getKingaku()); } DtoList.add(dto); return DtoList; }
//DTOクラスの項目と金額のフィールドはList<String>型のコード public List<KakeiboDto> setDto(List<Kakeibo> resultList) { List<KakeiboDto> DtoList = new ArrayList<KakeiboDto>(); KakeiboDto dto = new KakeiboDto(); String strDate= String.valueOf(resultList.get(0).getDate()); dto.setDate(strDate); for(Kakeibo entity : resultList) { //date 違う日付がある場合(8/16から8/18に切り替わるタイミング) if(!strDate.equals(String.valueOf(entity.getDate()))) { DtoList.add(dto); dto = new KakeiboDto(); dto.setDate(String.valueOf(entity.getDate())); strDate=String.valueOf(entity.getDate()); } //変更点 当前ヌルポで落ちる dto.getKoumoku().add(entity.getKoumoku()); //変更点 dto.getKingaku().add(entity.getKingaku()); } DtoList.add(dto); return DtoList; }

イメージ説明

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

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

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

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

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

guest

回答1

0

オリジナルのソースをできるだけ残して書き換えると

java

1//DTOクラスの項目と金額のフィールドはList<String>型のコード 2public List<KakeiboDto> setDto(List<Kakeibo> resultList) { 3 4 List<KakeiboDto> DtoList = new ArrayList<KakeiboDto>(); 5 6 // 前回の日付を入れる変数 7 String prevDate = ""; 8 9 for(Kakeibo entity : resultList) { 10 String strDate = String.valueOf(entity.getDate()); 11 12 //date 違う日付がある場合(8/16から8/18に切り替わるタイミング) 13 if(!strDate.equals(prevDate)) { 14 KakeiboDto dto = new KakeiboDto(); 15 dto.setDate(strDate); 16 dto.setKoumoku(entity.getKoumoku()); 17 dto.setKingaku(entity.getKingaku()); 18 19 // リストに格納 20 DtoList.add(dto); 21 22 // 次のチェックのため、前回の日付を保存 23 prevDate = strDate; 24 } 25 } 26 27 return DtoList; 28}

こんな感じでしょうか(resultListは日付でソートされている前提です)。

ただ、どうやってデバッグしているのか環境が書かれていないので、推測になりますが、実行して結果を見て修正、というやり方をされているように見えます。これは効率が悪いです。初学者ならなおさらです。

開発環境(EclipseなどのIDE等)があれば、ステップ実行で、一行ずつ止めて変数の値が意図通りになっているか確認しながら進める、開発環境がないのであれば、ログファイルなどに変数の内容を出力して実行後に確認する等をしないと、問題点を机上デバッグ(ソースを眺めるだけ)で見つけ出すのは初学者には敷居が高いと思います。

逆に言うとデバッグの方法を把握していれば、ここで質問するまでもなく解決できる内容だと思います。
面倒でも開発環境を構築して開発に取り掛かった方が全体としての効率が良くなると思いますので、一度どのような手法が現在の開発に向いているか等調査されることをお勧めします。

投稿2020/08/22 16:31

KoichiSugiyama

総合スコア3041

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

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

退会済みユーザー

退会済みユーザー

2020/08/23 01:10

ご回答ありがとうございます。 教えていただいたやり方で、デバックでreturn のListの中の構造がパラメータのresultListと同じになってしまい、日付ごとに項目と金額を表示させることはできないと思うのですが・・・
KoichiSugiyama

2020/08/23 02:51

質問文からはどういう型のデータがresultListに入っているのか判りませんので、出力にあるように'yyyy/MM/dd'という文字列だと想定してサンプルを作りました。もし私の想定が違うようでしたら、元データにどういう実データが入っているかも含めて質問文を編集していただければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問