java オブジェクトのリストから特定の値をもったオブジェクトを取得
受付中
回答 5
投稿
- 評価
- クリップ 2
- VIEW 36K+

退会済みユーザー
ArrayListで作ったリストのオブジェクトから特定の値を持ったオブジェクトを取得する方法を教えて下さい。
例えば、Memberクラスが持っているIDという値が最も小さいオブジェクトをリストから取得する と言うような事です。
javaどころかオブジェクト指向も初心者ですので、用語すらよく理解してない変な質問になっているかも知れませんがよろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
・
ArrayList
からStreamを取得します。
・
min
メソッドで最小値を取得します。最小値の判定は、Comparator
を使います。Comparator.comparing
を使うと、そのオブジェクトを比較するための値を取得するためのFunction
を指定できます。
・値が
Optional
で返されるのは、min
をしたときにStream
の件数がゼロになっている可能性があるためです。
たぶんこの説明だけで理解するのは難しいと思います。わからない点はひとつずつ調べてみてください。
参考リンク:
Stream.minメソッド - Java 8 APIドキュメント
サンプルコード
// Java8以降
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Optional;
public final class App {
public static void main(String[] args) {
Member m1 = new Member("aaa", 15);
Member m2 = new Member("bbb", 32);
Member m3 = new Member("ccc", 14);
Member m4 = new Member("ddd", 24);
ArrayList<Member> members = new ArrayList<>(Arrays.asList(m1, m2, m3, m4));
Optional<Member> min = members.stream().min(Comparator.comparing(x -> x.id));
System.out.println(min.get()); // => Member [name=ccc, id=14]
}
}
class Member {
String name;
int id;
Member(String name, int id) {
this.name = name;
this.id = id;
}
@Override
public String toString() {
return "Member [name=" + name + ", id=" + id + "]";
}
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
Comparatorをimplementsしたクラスを使用して、自分好みのソート順を作成することもできます。
実際、業務でもよく使ってました。
ソースを書こうと思ったのですが、詳しいサイトを見つけたので乗せときます。
Listの要素をソートする(独自クラス)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
Listを作成し、for文でListを回してあげて該当の天気(今回の場合だと晴れ)と一致したら保存用のlistに抽出してあげてます。
ご参考にしていただければ幸いです。
public static void main(String[] args) {
String weather = "晴れ";
List<String> list = new ArrayList<String>();
list.add("晴れ");
list.add("雨");
list.add("曇り");
list.add("雷");
list.add("晴れ");
list.add("曇り");
list.add("曇り");
list.add("雨");
list.add("曇り");
list.add("雨");
list.add("雷");
list.add("晴れ");
list.add("曇り");
list.add("雨");
list.add("雷");
list.add("雨");
list.add("雷");
List<String> tmp = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(weather)) tmp.add(list.get(i));
}
for (int i = 0; i < tmp.size(); i++) {
System.out.println(tmp.get(i));
}
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
以下に手順を示します.
1. for文でリストに入っている要素の数分ループさせ,Memberクラスのオブジェクトを順番に取得する
2. 1で取得したMemberオブジェクトのIDと,それまでの最小値とを比較し,小さい方を保持する
3. ループが最後まで終了した時に保持されているオブジェクトが求めるオブジェクトである
これをコード化すると
ArrayList<Member> list; //Memberオブジェクトをすでに入れてあるリストとする
int min = Integer.MAX_VALUE; //最小のIDを保持する変数 最初はint型の最大値に設定しておく
Member minMember = null; //IDが最小のMemberを保持する変数
for(int i = 0; i < list.size(); i++){ //listの要素の数だけループ
Member member = list.get(i); //i番目のlist要素を取り出す
if(member.id < min){ //idがそれまでの最小値より小さい場合
min = member.id;
minMember = member;
}
}
このループが終わった時のminMemberが「id最小のMemberオブジェクト」となります.投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
リストをforで回しながら最小の値を判定するといったシンプルな作りです。
Member a = new Member();
Member b = new Member();
Member c = new Member();
a.ID = 2;
b.ID = 1;
c.ID = 3;
ArrayList<Member> list = new ArrayList<Member>();
list.add(a);
list.add(b);
list.add(c);
Member target = null; //最小値のIDを保持するオブジェクトを格納する変数。
for(Member tmp : list){ //拡張for文によりlistの中身を1件ずつとりだしてtmpに格納する。
if(target == null){
target = tmp;
}else if(target.ID > tmp.ID){ //targetとtmpを比較してtmpの方が小さければtargetに格納する。
target = tmp;
}
}
※MemberクラスのIDはint型とします。
※最小値のIDを保持するオブジェクトが複数ある場合は考慮してません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。