2017-03-06 51 views
1

我是新来流和Java,我会知道什么是我的收藏方法.stream().collect(ArrayList???::new, (acc, x) -> acc.add(x), ..)Java的泛型类型化的收藏家

+3

与'new ArrayList <>()'vs'new ArrayList ()'相同。 – shmosel

+0

@shmosel你的意思是'new ArrayList()'? – Andreas

+0

@Andreas不,这将是一个原始类型。 – shmosel

回答

0

我从来没有见过ArrayList<String>::new任何地方使用ArrayList::newArrayList<Node>::new之间的差异。收集器的javadoc有几个例子,例如使用HashSet::newTreeMap::new

据我所知,当类型推断无法找出正确的泛型类型时,只需要指定泛型类型,但我不记得看到发生了这种情况。

+0

你不能总是使用HashSet :: new或TreeMap :: new,我想你使用type info然后 – Joey

+0

你是什么意思?发布代码示例。 –

+0

['Collectors.toCollection()']的源代码(http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/stream/Collectors .java#Collectors.toCollection%28java.util.function.Supplier%29)在方法调用中使用显式类型,尽管在那里似乎没有必要。我曾经使用它来解决Eclipse推理错误。之前我也需要'obj :: 方法'。 – shmosel

-3

它们都是您可以在Java中创建数组的不同方式。

new ArrayList<Node>() 

上面的数组样式是一个通用的数组类型。这意味着你需要指定它是什么类型的数组列表。因此,在上面的示例中,简单地定义它是哪种类型的数组,例如,字符串,或者甚至可以是另一个类。