Java中任意集的笛卡尔积您知道一些简洁的Java libary允许您生成两个(或更多)集合的笛卡儿积吗?例如:我有三套。一个是类人物的对象,第二个是礼物类的对象,第三个是吉夫特扩展类的对象。我想要生成一套包含所有可能的三元组的人-礼物-吉夫特扩展。集合的数量可能会有所不同,所以我不能在嵌套的foreach循环中这样做。在某些情况下,我的应用程序需要制作一个人-礼物对的产品,有时是三人-礼物-吉夫特扩展,有时甚至可能有设置Person-Gift-GiftExtension-GiftSecondExtension-GiftThirdExtension,等。
3 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
删除了两个集合的先前解决方案。有关详细信息,请参阅编辑历史记录。
public static Set<Set<Object>> cartesianProduct(Set<?>... sets) { if (sets.length < 2) throw new IllegalArgumentException( "Can't have a product of fewer than two sets (got " + sets.length + ")"); return _cartesianProduct(0, sets);}private static Set<Set<Object>> _cartesianProduct(int index, Set<?>... sets) { Set<Set<Object>> ret = new HashSet<Set<Object>>(); if (index == sets.length) { ret.add(new HashSet<Object>()); } else { for (Object obj : sets[index]) { for (Set<Object> set : _cartesianProduct(index+1, sets)) { set.add(obj); ret.add(set); } } } return ret;}
Triple<A, B, C>
添加回答
举报
0/150
提交
取消