JavaのArrayListに要素を追加しながら日付を比較する方法について

このQ&Aのポイント
  • JavaのArrayListに要素を追加しながら、日付を比較する方法を教えてください。
  • 具体的には、ValueObjectクラスをArrayListに追加する際に、配列の日付とValueObjectの日付を比較し、一致する場合に特定のフラグをセットし、再度ArrayListに詰め直す必要があります。
  • 今のところうまい方法が思い浮かばず困っています。お助け願いします。
回答を見る
  • ベストアンサー

ArrayListの質問。

ロジックの質問なのですが、、 ValueObjectクラス  private boolean flg = false;  private String strYMD; それぞれgetter/setter あらかじめ、aValの方にsetterで、20040626とセットします。 このオブジェクトをArrayListへaddしていきます。 ここで、String[] strYMDArray ={"20040623","20040626","20040622"}; という配列があります。 このとき、ArrayListの中身の要素数でループさせて、 配列strYMDArrayの日付と、ArrayList内のValueObjectの日付を比較し、同じであれば、 ValueObjectのflgをセットし、再度、ArrayListへつめなおしてやらなければなりません。 しかし、うまい方法を思い浮かべることができません。 どうか、うまい方法をおしえてくださいませんでしょうか? よろしくお願いいたします。

  • Java
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こういう感じじゃないですか? public class tttt {  static public void main(String[] args){   ArrayList array = new ArrayList();   //20040620から20040629までの+サンプルを作成   for(int i=0; i<9; i++)   {    ValueObject ov = new ValueObject();    ov.setYMD("2004062"+i);    array.add(ov);   }   String[] strYMDArray ={"20040623","20040626","20040622"};   for(int i=0; i<array.size(); i++)   {    for(int j=0; j<strYMDArray.length; j++)    {     if(((ValueObject)array.get(i)).getYMD().equals(strYMDArray[j]))     {      ((ValueObject)array.get(i)).setFlg(true);     }    }   }   for(int i=0; i<array.size(); i++)   {    System.out.println(((ValueObject)array.get(i)).getYMD());    System.out.println(((ValueObject)array.get(i)).getFlg());   }  } } これの何処を悩んでいるんでしょうか?

その他の回答 (2)

回答No.2

何がやりたいのかが表現されてないので、よくわかりませんが・・・ ある日付に対応する「フラグのセット」と「フラグの取得」という ことが御希望なんでしょうか? もし、そうだったら Hashtable() 使ってはどうですか? 「比較」も「つめ直し」も「ループ」もいりませんよ。 Hashtable htbl = new Hashtable(); ★フラグセット "20040626", "20040701", "20040801" のフラグをセットする。 htbl.put(new String("20040626"), new Integer(1)); htbl.put(new String("20040701"), new Integer(1)); htbl.put(new String("20040801"), new Integer(1)); その後、また "20040626" というデータが出現しこれもセットしなければならないとしても そのまま htbl.put(new String("20040626"), new Integer(1)); とすれば、上書きされます。 上では Integer を入れてますが何かが入っているかはいってないかを識別するだけのためなので Integer でなくてもいいですし、値もテキトーです。 ★フラグ取得 boolean flg = ((null != (Integer)htbl.get("20040626"))? true; false); または if(null == (Integer)htbl.get("20040626")) {  flg = false; } else {  flg = true; } そういうことではなくて、「ValueObjectクラス」を配列的に保持しないとならない理由があったとしても htbl.put(new String("20040626"), [ValueObjectクラス] ); としたほうが簡単じゃないですか?

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

わからない箇所がいくつかあります。 ・aValとは何か? strYMDとは違うのか? ・再度ArrayListへ詰め直すと言うが、 それはもとのArrayListと同じものか? 違うものか? 同じものの場合は、「詰め直す」ことをしなくても、 単にflgをtrueにするだけでいいのではないか? この処理は、プログラム的には、ループを二重に回すだけです。 外側のループでは、ValueObjectクラスが格納されている ArrayListの全要素を得る。(iteratorを使う方法でも、 size()で得られる回数ループする方法でも、どっちでもよい) 内側のループでは、strYMDArray.lengthだけfor文で ループさせながら文字列比較をすればよい。 普通に考えれば上のようになります。 これよりもうまい方法が必要なのでしょうか? 両方のデータがソートされていることを前提とするなら、 もう少し比較回数を減らす方法はあります。 しかし、流れがかえって煩雑になるし、 動作速度の向上もたいしたことなさそうなので、 普通は二重ループによる方法で十分でしょう。 (両方に1000個以上のデータが入っている…などになるとまた別ですが)

関連するQ&A

  • 日付の妥当性チェックをする場合

    日付の妥当性チェックをする場合 いつもお世話になっております。 jspで選択された日付を(日付は<html:select>で選択されます。) ActionFormもしくはLogicでどのようにしたらいいかわかりませんでしたので ご質問させて頂きました。 今、私が実装しているActionFormは public class UserDateCheckActionForm extends ActionForm{ private String year; private String month; private String days; //省略(setter,getter) public boolean checkDate(String year, String month, String days){ String strDate = year+month+days; DateFormat format = DateFormat.getDateInstance(); // 日付/時刻解析を厳密に行うかどうかを設定する。 format.setLenient(false); try{ format.parse(strDate); return true; }catch(Exception e){ return false; } とこのように実装しております。これをvalidateメソッドでvalidateし、 存在しない日付(例:2000年2月31日など)をjspからsubmitされたときは jspに<html:errors>にて正しい日付を入力する旨のメッセージを出すように したいと思っております。 validateメソッドは正常に動いており、ここのロジックが悪いのかと思い、 皆様に見直して頂ければと思い、今回質問させて頂きました。 お力添え頂ければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • ArrayListクラスを利用するプログラムについて質問があるのですが。

    「Genericsを用いたArrayListを使用しループ処理にはiteratorを使用する。 という指定の下、 ArrayListのインスタンスを生成し次の5つの文字列を追加した後、 for文を使ってリストの中身を全て順番に画面表示したいんです。 "AA" "BB" "CC" "DD" "EE" --------------------------- import java.util.ArrayList; class TestA{ public static void main(String args[]) { ArrayList<String> array = new ArrayList<String>(); array.add("AA"); array.add("BB"); array.add("CC"); array.add("DD"); array.add("EE"); } } --------------------------- ここからよく解らないので教えていただけませんでしょうか?

    • ベストアンサー
    • Java
  • ArrayListを使った多次元配列の作成について

    ArrayListで可変長配列を扱っているのですが、 2次元可変長配列を用いる必要が出てきたので、 下記のように変更したのですがうまくいきません。 何が悪いのか教えていただけませんでしょうか? ----------------------------------------- ArrayList cars=new ArrayList(); cars.add("フェラーリ"); cars.add("ポルシェ"); cars.add("メルセデスベンツ"); for(int i=0;i<cars.size();i++){  String str=(String)cars.get(i);  System.out.println(str);} ----------------------------------------- 上記から下記のように変更しました。 ----------------------------------------- ArrayList[] cars=new ArrayList[3]; cars[0].add("フェラーリ"); cars[0].add("ポルシェ"); cars[0].add("メルセデスベンツ"); for(int i=0;i<cars[0].size();i++){  String str=(String)cars[0].get(i);  System.out.println(str);} ----------------------------------------- エラーは「Exception in thread "main" java.lang.NullPointerException」です。 どうやら初期配列が10ではなく3となってしまっているようです。

    • ベストアンサー
    • Java
  • ArrayListに多次元配列

    ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。

    • ベストアンサー
    • Java
  • ArrayListへArrayListの格納

    お世話になっております。 ArrayListを2つ使用して2次元配列のような事をしようとしております。 データベースから取得したデータの1行をArrayListItemへ格納してそのArrayListItemをArrayListRecordへ格納しようとしております。 追加し終わり最後にArrayListRecordの中身を見ると全て一番最後のデータで置き換わっています。 どなたかご存知でしたらお教え願います。 ' 変数宣言 Dim objSqlDR As SqlDataReader Dim alSetItem As ArrayList Dim alSetRecord As ArrayList alSetItem = New ArrayList alSetRecord = New ArrayList ' データ取得分ループ While objSqlDR.Read()  alSetItem.Clear()  For intSetIndex = 0 To (objSqlDR.FieldCount - 1)   alSetItem.Add(objSqlDR(intSetIndex))  Next intSetIndex  alSetRecord.Add(alSetItem) End While

  • ArrayListに配列を入れることは出来ますか?

    最近javaの勉強を始めました。 それで質問なのですが、ArrayListにString型の配列を入れれないでしょうか? また、Genericsはどうなるのでしょうか(取り出すときにキャストする方法でも)? よろしくお願いします。

    • ベストアンサー
    • Java
  • strutsでArrayListの中の配列の表示の仕方。

    タイトルどおりなんですが。よくわかりません。例えば以下のようです。numberに紐づいた複数のデータが配列に入っています。 public static Bean setBean (int number, String[] strArray){ bean.setNumber(number); bean.setArray(strArray); return bean; } たいぶ、はしょってますがこんな感じでbeanにintのnumberとStringの配列をsetして、受け取り側でそのbeanをArrayList(array)にaddしています。それをjspで表示したいのです。jspは下のようです。 <logic:iterate name="form" property="array" id="list" > <bean:write name="list" property="number"> ここにstrArrayを表示したい。 </logic:iterate>  といった具合です。どお書けばいいんでしょうか?ご教授お願いします。

    • ベストアンサー
    • Java
  • ArrayList で配列を扱う場合の記述方法について

    ArrayList で配列を扱う場合の記述方法について、 探しきれないのでご教授お願いします。 ArrayList list = new ArrayList(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } という箇所をArrayList<Date>listを使って書き直すのはどのようになるでしょうか。 ArrayList<Date>list= new ArrayList<Date>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } とすると、 型 ArrayList<Date> のメソッド add(Date) は引数 (String) に適用できません。 というエラーになってしまいました。

    • ベストアンサー
    • Java
  • logic:iterateタグでString配列を・・・

    aisatu[0] = "hello"; aisatu[1] = "こんにちは" というString配列があったとします(setter,getterもあります)。 <jsp:useBean id="helloworld"class="javahello.HelloWorld" > <logic:iterate id="abc" name="helloworld" property="aisatu"> <bean:write name="abc" property="aisatu" /> </logic:iterate> という記述の仕方であってると思うのですが、 うまく配列を表示してくれません。 なにかご指摘ありましたらよろしくお願いします。

  • ArrayListのバージョン変換

    今、JAVAを勉強しているのですが、環境の問題でJAVA1.4しか使えません。 しかし、市販の本を購入し、プログラムを書いて練習していたら、JAVA5.0のプログラムでした。 下記のプログラムを1.4のバージョンに変更するにはどうしたらいいのでしょうか?? ---プログラム--- import java.util.ArrayList; public class ItemCollection { //商品一覧を保持するArrayList protected ArrayList<Item> list; //商品一覧に対するGETTER,SETTER public ArrayList getList(){ return this.list; } public void setList(ArrayList<Item> list){ this.list = list; } //引数のないコンストラクタ public ItemCollection(){ } //商品一覧に商品を追加 public void addItem(Item item){ list.add(item); } //商品一覧に商品を参照 public Item getItem(int index){ return list.get(index); } //商品一覧の数を返す public int getSize(){ return list.size(); } }

    • ベストアンサー
    • Java