Для инициализации экземпляра PowerSet вам нужно вызвать его конструктор PowerSet (), хотя это будет бесполезно, поскольку в нем нет связанных с объектом логик c.
"of" - это метод stati c, объявленный в PowerSet, который принимает набор с размером <= 30 и возвращает список наборов с logi c из <a href="https://en.wikipedia.org/wiki/Power_set" rel="nofollow noreferrer"> power set . Это реализовано расширением AbstractList.
Set<Long> input = new HashSet<Long>();
input.add(1L);
input.add(2L);
List<Set<Long>> example = PowerSet.<Long>of(input);
Итак, example.get(0)
приведет к пустому HashSet, example.get(1)
== {1}; example.get(2)
== {2}, example.get(3)
== {1, 2}
Вы можете переписать его в более обычном формате:
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class PowerSet<E> extends AbstractList<Set<E>> {
private List<E> src;
public PowerSet(Set<E> s){
//copying set contains to a list to access by index
src = new ArrayList<>(s);
}
@Override
public int size() {
return 1 << src.size(); // 2 to the power srcSize
}
@Override
public boolean contains(Object o) {
return o instanceof Set && src.containsAll((Set) o);
}
@Override
public Set<E> get(int index) {
Set<E> result = new HashSet<>();
for (int i = 0; index != 0; i++, index >>= 1) {
if ((index & 1) == 1) {
result.add(src.get(i));
}
}
return result;
}
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add()...
PowerSet<String> = new PowerSet(set);
}