将集合转换为列表

51

我想问一下:在Java中如何将Collection转换为List


4
你是想“说”吗?还是你真的想“知道”? :) - BalusC
看起来你不知道如何在Java中使用通用集合。不妨阅读一下教程吧?http://java.sun.com/docs/books/tutorial/collections/intro/index.html - mickthompson
所以,我们正在等待您的故事。 - Artsiom Anisimau
7个回答

71
Collection<MyObjectType> myCollection = ...;
List<MyObjectType> list = new ArrayList<MyObjectType>(myCollection);

Java教程中查看集合教程


55
如果您已经创建了一个列表子类型的实例(例如ArrayList,LinkedList),您可以使用addAll方法。
例如,
l.addAll(myCollection)
许多列表子类型也可以在它们的构造函数中接受源集合。

8
List list;
if (collection instanceof List)
{
  list = (List)collection;
}
else
{
  list = new ArrayList(collection);
 }

2
感谢Sandeep的贡献-只需在else语句中添加空指针检查即可避免NullPointerException。
if(collection==null){
  return Collections.emptyList();
}
List list;
if (collection instanceof List){
  list = (List)collection;
}else{
  list = new ArrayList(collection);
}

2
创建一个新的列表,然后使用传入的集合调用addAll方法。

0

你可以使用其中任何一种解决方案.. 但是请考虑是否有必要克隆你的集合,因为这两个集合将包含相同的对象引用


-3

CollectionList是接口。你可以选择任何实现了List接口的类:ArrayList LinkedList,然后将其强制转换回Collection,因为它在顶层。

下面的示例展示了从ArrayList进行强制转换:

public static void main (String args[]) {
    Collection c = getCollection();
    List myList = (ArrayList) c;
}

public static Collection getCollection()
{
    Collection c = new ArrayList();
    c.add("Apple");
    c.add("Oranges");
    return c;
}

4
我猜测你被downvote(踩)是因为这种方法并非总是奏效的。当Collection的实现类实现了List接口时,比如ArrayList,LinkedList等,这个方法就能用。但是一旦你尝试像这样做:Map<Foo,Bar> myMap = new HashMap<Foo,Bar>(); List<Bar> fromMap = (List<Bar>) myMap.values(); 在编译时看起来一切都很好,但是运行时会得到java.lang.ClassCastException: java.util.HashMap$Values cannot be cast to java.util.List的错误。 - Matt Ball
1
这个概念完全是错误的。你不能通过强制转换来将任意集合变成列表。 - Dirk Hillbrecht

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接