java中的规范toList?

java中的规范toList?,java,collections,Java,Collections,在任何标准库(例如ApacheCommons、guava)中都有类似的东西吗 publicstaticlist-toList(Iterable-Iterable){ if(列表的iterable instanceof) 返回(列表)可编辑; if(集合的iterable instanceof) 返回新的ArrayList((集合)iterable); 列表结果=新建ArrayList(); 对于(T项:iterable) 结果.添加(项目); 返回结果; } 我不这么认为,因为您的实现做了两件完

在任何标准库(例如ApacheCommons、guava)中都有类似的东西吗

publicstaticlist-toList(Iterable-Iterable){
if(列表的iterable instanceof)
返回(列表)可编辑;
if(集合的iterable instanceof)
返回新的ArrayList((集合)iterable);
列表结果=新建ArrayList();
对于(T项:iterable)
结果.添加(项目);
返回结果;
}

我不这么认为,因为您的实现做了两件完全不同的事情:

  • 如果参数是一个列表,则返回它。因此,返回的列表将是参数的“实时视图”。对每个列表的更改在另一个列表中可见
  • 如果参数不是列表,则返回其副本。返回的列表将独立于参数

这两件事如此不同,以至于任何一个正常的通用库都不会将它们放在一个方法中。

为什么要找一个库来替换三行长的代码?@Peter-没有特别的原因。但是,这是我在不同的项目中反复编写的代码,所以如果它确实存在于我想知道的地方。在您的一个类中创建一个实用函数(
static
)。@Peter-已经完成了。我是说,这会在不同的项目中出现,而不是共享相同的代码库。为什么要寻找一个库来替换三行长的代码?因为这就是帮助程序库的用途:删除样板代码。非常好的答案(就像Jon Skeet删除的答案一样)。我能理解这种方法的必要性,但其影响将是可怕的。我不敢相信我仍然看不到删除的答案。如果+1正是我们不将其包含在番石榴中的原因,那么为什么不使用一种方法,不管发生什么,它总是做第二件事呢?这已经在番石榴的
列表中提供了。newArrayList(…)
public static <T> List<T> toList(Iterable<T> iterable) {
    if (iterable instanceof List)
        return (List<T>)iterable;

    if (iterable instanceof Collection)
        return new ArrayList<T>((Collection<T>)iterable);

    List<T> result = new ArrayList<T>();
    for (T item : iterable)
        result.add(item);

    return result;
}