

【1】 生徒(Student)クラスを生成し、住所(address)などを設定
【2】 1を、List型オブジェクトに格納。
【3】 2のListの中の生徒(Student)オブジェクトから、住所毎に集計する
3のやり方を教えて下さい。
例えば、以下のような感じです。
---------------------------------------------------
//【1】 Studentオブジェクトを大量に生成し、それぞれに住所などを設定
Student smith = new Student();
smith.setAddress("hongkong");
Student ken = new Student();
ken.setAddress("tokyo");
Student scott = new Student();
scott.setAddress("scottland");
(以下、同様)
・
・
・
//【2】 生成した全てのStudentオブジェクトをListに格納していく。
List studentList = new ArrayList();
studentList.add(smith);
studentList.add(ken);
studentList.add(scott);
(以下、同様)
・
・
・
//【3】 ListオブジェクトからStudentオブジェクトを取得し、
//同じ住所毎に、集計する
//<例>
//hongkong--- 4900人
//tokyo--- 3800人
//scottland--- 4600人
---------------------------------------------------
1や2は、すでに出来上がっていて、変更できない為、
3のやり方のみ教えて下さい。
(Studentオブジェクトが格納されたListオブジェクトが、既に存在することが前提)
また、Studentオブジェクトが大量にある為、
処理が重くなる実装の仕方は避けたいです・・。
もし分かる方いましたら、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
もう遅いかもしれませんが、一応回答を。
(もちろん私も、その(1)と(2)設計には眉をひそめます)
// 集計
HashMap counts = new HashMap ();
for (Iterator i = studentList.iterator (); i.hasNext (); ) {
final Student student = (Student) i.next ();
final String address = student.getAddress ();
if (counts.containsKey (address)) {
((int[]) counts.get (address))[0]++;
} else {
counts.put (address, new int[] {1});
}
}
// 集計結果を取り出す例
for (Iterator i = counts.keySet ().iterator (); i.hasNext (); ) {
final String address = (String) i.next ();
final int count = ((int[]) counts.get (address))[0];
System.out.println (address +"--- "+ count +"人");
}
一応テストもしました。
No.3
- 回答日時:
補足ですが、
もちろん、このやり方では、システムの負担や、名前でSutudentを引くようなことはできなくなります。
1の方が言うようにDBでやるのがベストでしょう。
No.2
- 回答日時:
List studentList = new ArrayList();
ここのところ、
Listではなく自分でクラスを作ってみてはどうですか?
つまり、
内部でHashMapの中にArrayListを配列で持つ器をつくり、住所をキーにして生成したArrayListをHashMapにputしていくというような・・・
簡単に書くと、
HashMap hash = new HashMap();
void add(Student student){
if(containsKey(student.getAddress())){
((ArrayList)hash.get(student.getAddress())).add(student);
}else{
ArrayList list = new ArrayList();
list.add(student);
hash.put(student.getAddress(),list);
}
}
こうすれば、ArrayListのサイズを調べるだけですみます。
No.1
- 回答日時:
DBつかってやったほうがはやいんじゃないですか?
1と2ができあがっているとのことですが、
目的の機能ができてないのだから1,2もできてないってことで作り変えたほうがいいんじゃないでしょうかね。
それでもこれでやりたいっていうなら
Listのなかをいっこいっここじ開けて
if文できいて集計していくしかないのではないでしょうか?
集計するのが目的なら
Listにaddするまえにカウントしてからaddするか
地域ごとに別のListをつくってサイズをみたほうがいいのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- 英語 提示文の構造について(名詞+be that V?) 2 2023/05/19 09:46
- Word(ワード) Wordの段落設定についての質問 2 2023/07/24 06:52
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Java どうしてListオブジェクトをIteratorに変換するのですか 1 2022/12/03 17:45
- PHP クラス 1 2022/08/08 15:12
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- Amazon Amazon「Prime Student(プライムスチューデント)」の支払い方法について 1 2022/03/28 19:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBからExcel上の処理をするプロ...
-
複数シートの選択
-
インスタンスとオブジェクト 生成
-
int + Integer
-
iswebの[残像を残しながら別の...
-
VBA 同じ名前のオブジェクトを...
-
インスタンスオブジェクトとは...
-
SQLException
-
location.hrefが対応してるブラ...
-
日付のカウント
-
Android super.onCreate(sa
-
Wordに変換したPDFファイルのオ...
-
javaのCalendar型を日付型に変...
-
Wordのページ数の取得
-
サーブレットでのFormオブジェ...
-
複数のCGIで変数などの値を共有...
-
javascript 例外処理
-
わかる方お願いします!
-
Math.randomについて
-
ASPでオブジェクトの開放について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
VBA 同じ名前のオブジェクトを...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
Object型からDouble型へのキャスト
-
時間帯判定をする。
-
newは明示的にした方が良いのか?
-
戻り値がクラスオブジェクト
-
ワイルドカード<?>と型パラメー...
-
error C2712: オブジェクト ア...
-
Accessの連結・非連結オブジェ...
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
多人数のじゃんけんプログラム
-
Rangeオブジェクトを一時的に作...
-
ワードで画像をドロップすると...
おすすめ情報