2013-12-08 3 views
0

Я изучаю библиотеку Java Guava, написав небольшие фрагменты кода. Вот что я написал для поиска cartesian product n-множеств. Documentation hereJava Guava 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

aah! Забытый java имел Явные аргументы типа. Благодарю. –