Java Guava CartesianProduct

Я изучаю библиотеку Java Guava, пишу небольшие фрагменты кода. Вот что я написал для поиска декартова произведения из n-множеств. Документация здесь

//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)


person Srikar Appalaraju    schedule 08.12.2013    source источник


Ответы (1)


Проблема в том, что вы создали необработанный 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);
person Konstantin Yovkov    schedule 08.12.2013