将自定义对象传递给Arrays.asList

时间:2012-07-26 09:36:44

标签: java arrays

假设我有一个Person类,我正在尝试创建一个列表;

Person p1 = new Person("first", "id1");         
Person p2 = new Person("dummy", "id1"); 
Person p3 = new Person("second", "id2");         
Person p4 = new Person("third", "id1");         
List<Person> asList = Arrays.asList(p1, p2, p3, p4); 

现在我的问题不是将单个Person对象传递给Arrays.asList()

我可以传递组合列表,例如

List<Person> asList = Arrays.asList(combinedPersonObjs); 

我尝试了很多东西,但是却出现了投射错误。

请帮忙

注意: Person对象的数量是动态的。

5 个答案:

答案 0 :(得分:8)

当然,你可以做到

Person[] combinedPersonObjs = { p1, p2, p3, p4 };
List<Person> asList = Arrays.asList(combinePersonObjs);

如果您事先不知道Person个对象的数量,那么可能您没有为每个对象提供一个变量标识符。我建议你做一些像

这样的事情
List<Person> asList = new ArrayList<Person>();
for (int i = 0; i < numberOfPersons; i++)
    asList.add(new Person(ithName(i), "id" + i));

答案 1 :(得分:2)

将所有对象放入数组中并将此数组传递给Arrays.asList()

你可以在这里找到文件.. http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html

答案 2 :(得分:1)

你可以完全绕过数组(我不太明白你为什么要使用它)并创建一个从list派生的匿名类:

List<Person> persons = new ArrayList<Person>(){{
   add(new Person("first", "id1"));
   add(new Person("second", "id2"));
   // etc..
}};

请注意,这会在静态块中使用初始化并创建内部类(如果您不期望它,可能会引起一些混淆)。请注意,内部块可以循环并添加动态数量的对象(正如您在问题编辑中所述)。

但为什么不这样做:

List<Person> persons = new ArrayList<Person>();
persons.add(new Person(...));

等?

答案 3 :(得分:1)

列表对象可以包含多种类型的对象。因此,在列表中,您可以拥有人物对象以及列表这样的人

List<Person> myList = new List<Person>();
Person p1 = new Person();
Person p2 = new Person();
myList.add(p1);
myList.add(p2);
Person p3 = new Person();
List<Object> globalList= new List<Object>();
globalList.add(myList );
globalList.add(p3);

答案 4 :(得分:1)

只是不要创建本地参考,你可以这样做:

List<Person> list = new ArrayList<Person>();
for( /* add here gardian */ ) {
    list.add(new Person("first", "id1"));
}