0

私は人々を説明するデータを持っています - それらはすべてID、髪の色、目の色、年齢などを持っています.Peopleクラスにはそれらの値が含まれています. 他のクラスで次のようなマップを作成しました。

private static Map<Integer, People> people = new HashMap<Integer, People>();

そのための getPeople() メソッドを作成したので、別の場所で使用できました。

「人」マップの値を取得しようとすると、brownblue6 のような長い文字列として返されます。正しい値が返されるため、問題はありませんが、それらを 1 つずつ使用する必要があります。

たとえば、その人の ID を使って何かをしたり、その人の目が青い場合はその人の髪の色を取得したりする必要があるとします。

これらの値を反復処理したり、「eyeColor」文字列の値のみを取得したりするにはどうすればよいですか? ここでマップを使用する必要がありますか、それとも別の簡単な方法がありますか? (人々を説明するものは、別のクラスにとどまらなければなりません。私はそれを変更することはできません。)

4

3 に答える 3

2

マップが必要かどうか、さらには使用しているキーが不明です。キーで物事を調べる必要がない限り、おそらく必要なのは- であり、インスタンスごとに1人人物を表すことを意図している場合はList<People>、タイプの名前を に変更する必要があります。その時点で、次を使用できます。Person

for (Person person : foo.getPeople() {
    String eyeColor = person.getEyeColor();
    // Do whatever you need
}
于 2012-12-24T21:54:15.273 に答える
1

まず、人はを意味します。あなたは次のようなものが欲しかったのではないかと思います:

private static Map<Integer, Person> people = new HashMap<Integer, Person>();

その後、enhanced-for-loopを使用してマップを反復処理できます。例えば:

for(Map.Entry<Integer, Person> person: people.entrySet())
{
   String hair = person.getHairColor();
   //... You can retrieve other features as well.
}
于 2012-12-24T21:55:12.590 に答える
0

クラスコードを提供していないので、フィールド名などを推測する必要がありますが、これはあなたが望むものを達成するはずです:

// Get the people (which are values, as opposed to keys) of the map.
Collection<Person> people = getPeople().values();

// Iterate over each person.
for (Person somePerson : people) {
    // Do something with the eye color.
    System.out.println("This eye color is " + somePerson.eyeColor);
}
于 2012-12-24T21:57:57.237 に答える