Set<Set<EKey>> (Set<? extends Set<EKey>> sop1, Set<? extends Set<EKey>> sop2) { Set<Set<EKey>> sop = new HashSet<>(); for (Set<EKey> prod1 : sop1) { for (Set<EKey> prod2 : sop2) { Set<EKey> prod = new HashSet<>(); prod.addAll(prod1); prod.addAll(prod2); sop.add(prod); } } return sop; }