2013-12-08 179 views
0

我正在通过编写小代码片段来研究Java Guava Library。这是我为寻找n-sets的cartesian product而写的。 Documentation hereJava番石榴CartesianProduct

//allLists populated above 
... 
List<Set> interimList = new ArrayList<Set>(); 
for(List<String> tmp : allLists) //converting List<List> to List<Set> 
{ 
    Set interimSet = new HashSet(tmp); 
    interimList.add(interimSet); 
} 
System.out.println(interimList); 
Sets.cartesianProduct(interimList); 

但是这不是编译。最后一行Sets.cartesianProduct不接受List<Set>。但根据文件是不是它的签名?

public static <B> Set<List<B>> cartesianProduct(List<? extends Set<? extends B>> sets)

错误消息:Cannot Resolve method cartesianProduct(java.util.List<java.util.Set)

+0

什么是您收到错误消息? – Philip

+0

只是FYI,Lists.newArrayList和Lists.newHashMap是非常方便的Guava方法。 –

+0

@IngoBürk你的意思是Maps.newHashMap吗? –

回答

7

的问题是,而不是一个普通的一个,你已经创建了一个原始Set

发生什么情况是,您正试图将List<Set<Object extends String>>传递给Sets.cartesianProduct(),这就是您收到编译类型错误的原因。

这编译:

List<Set<String>> interimList = new ArrayList<Set<String>>(); 
//converting List<List<String>> to List<Set<String>> 
for (List<String> tmp : allLists) { 
    Set<String> interimSet = new HashSet<String>(tmp); 
    interimList.add(interimSet); 
} 
System.out.println(interimList); 
Sets.cartesianProduct(interimList); 
+0

啊!忘了java有明确的类型参数。谢谢。 –