次の宣言を検討してください...
List<List<Person>> groups;
次のように言うことで、このリストに追加できますgroups.add(new Person(John));
外側のリストではなく内側のリストに追加する方法はありますか?
List<List<Person>> groups;
基本的に、リスト内の各項目は のリストであると言いますPerson
。
つまりPerson
、リストに を追加するには、最初List
に追加する要素の を作成する必要があります...
List<Person> person = //...
groups.add(person);
この内部リストにa を追加する場合はPerson
、それへの参照が必要です...
Person aPerson = //...
groups.get(0).add(aPerson);
例えば...
コメントに基づいて更新
AMap
は、たとえば、アイテムのような「グループ化」のためのより良いソリューションかもしれません...
Map<String, List<Person>> groups = new HashMap<>();
List<Person> persons = groups.get("family");
if (persons == null) {
persons = new ArrayList<>(25);
groups.put("family", persons);
}
persons.add(aPerson);
これは非常に基本的な例ですが、始めるのに役立ちます...コレクションのトレイルをウォークスルーすることも役立つかもしれません
汎用的な二重リスト クラスを定義して、それを行うことができます。明らかに、どのリストに追加するかを内部的に把握するのに役立つ特定のビジネスロジックがある場合は、これを拡張できます (インデックスを指定する必要はありません)。
import java.util.*;
public class DoubleList<T>
{
private List<List<T>> list;
public DoubleList()
{
list = new ArrayList<List<T>>();
}
public int getOuterCount()
{
return list.size();
}
public int getInnerCount(int index)
{
if (index < list.size())
{
return list.get(index).size();
}
return -1;
}
public T get(int index1, int index2)
{
return list.get(index1).get(index2);
}
public void add(int index, T item)
{
while (list.size() <= index)
{
list.add(new ArrayList<T>());
}
list.get(index).add(item);
}
public void add(T item)
{
list.add(new ArrayList<T>());
this.add(list.size() - 1, item);
}
}
次に、次のように使用します。
DoubleList<String> mystrs = new DoubleList<String>();
mystrs.add("Volvo");
mystrs.add(0, "Ferrari");
mystrs.add(1, "blue");
mystrs.add(1, "green");
mystrs.add(3, "chocolate");
for (int i = 0; i < mystrs.getOuterCount(); i++)
{
System.out.println("START");
for (int j = 0; j < mystrs.getInnerCount(i); j++)
{
System.out.println(mystrs.get(i,j));
}
System.out.println("FINISH");
}
でList<List<Person>> groups;
はないgroups.add(new Person(John));
のでgroups
、List<List..>
とは言えませんList<Person>
。
必要なのはget-and-addです:
List<List<Person>> groups;
//add to group-1
groups = new ArrayList<List<Person>>();
//add a person to group-1
groups.get(0).add(new Person());
//Or alternatively manage groups as Map so IMHO group fetching would be more explicit
Map<String, List<Person>> groups;
//create new group => students,
groups = new HashMap<String, List<Person>>();//can always use numbers though
groups.put("students", new ArrayList<Person>());
//add to students group
groups.get("students").add(new Person());
実際にはあなたはできませんgroups.add(new Person(John));
できるよ:
ArrayList<Person> t = new ArrayList<Person>();
t.add(new Person());
groups.add(t)