当前位置: 首页 > 面试题库 >

Java中任意集的笛卡尔积

狄望
2023-03-14
问题内容

你是否知道一些精巧的Java库,可让你制作两个(或更多)集合的笛卡尔积?

例如:我有三套。一个对象是Person类的对象,第二个对象是Gift的对象,第三个对象是GiftExtension的对象。

我想生成一个包含所有可能的三元组Person-Gift-GiftExtension的集合。

集的数量可能会有所不同,因此我无法在嵌套的foreach循环中执行此操作。在某些情况下,我的应用程序需要制作Person-Gift对的乘积,有时是Person-Gift-GiftExtension的三乘,有时甚至可能会设置Person-Gift-GiftExtension-GiftSecondExtension-GiftThirdExtension等。


问题答案:

编辑:删除了两组的以前的解决方案。有关详细信息,请参见编辑历史记录。

这是一种对任意数量的集合进行递归处理的方法:

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>),但是在Java中无法拥有任意数量的通用参数。



 类似资料:
  • 问题内容: 在学习了循环,数组,方法之后,…我开始玩图形游戏,但是遇到了一些问题。看到此示例时,我正在寻找一些示例:http : //javaceda.blogspot.ch/2010/06/draw- cartesian-coordinate-system-in.html 它提供了Java中笛卡尔平面的示例。我几乎可以理解该代码的所有内容(除了一些行,例如invokelater,SwingUti

  • 问题内容: 在Tensorflow中有什么简单的方法可以像itertools.product一样做笛卡尔积吗?我想获得两个张量(和)的元素组合,在Python中可以通过itertools作为。我正在Tensorflow中寻找替代方案。 问题答案: 我将在此假定和均为一维张量。 为了得到两者的笛卡尔积,我会用的组合和: 您使用LEN(一) LEN(B) 2张量,其中的元件的每个组合结束并且在最后一维

  • 问题内容: 我想找到元素集的笛卡尔积。这是一个例子 笛卡尔积是, abc aba acc aca bbc bba bcc bca 笛卡尔积是, zbc ybc xbc 因此,我正在考虑一种在Java中执行的算法,该算法可以在一开始就找到在编译时定义的特定数量组的笛卡尔积。 问题答案: 您可以使用该方法从谷歌的番石榴库生成笛卡尔产品: 如果一切都那么简单!

  • 我正在尝试对一个后端服务器进行负载测试,并将一些配置解析到一个标签对象中。我正在尝试生成< code>Label对象的笛卡尔乘积,这将是一个< code>Metric对象。 我有一个 方法添加 我试图以迭代/递归的方式做到这一点,但它变得非常复杂和混乱。我检查了是否有java8替代方案。如果我能够获得

  • 问题内容: 我试图找到两个不同集合的笛卡尔积。我在网上找不到有关列表或字典的笛卡尔积的任何信息。 功率设置也很混乱。 我使用的书中都没有这两个。 你们中的一位可以指出我正确的方向。 问题答案: 对于笛卡尔积,请检出。 对于幂,该文档也给我们的食谱: 例如:

  • 现在我只能实现两个集合的笛卡尔积,下面是代码: 这段代码在IntelliJ中运行良好,但在Eclipse(两者的编译器遵从级别均为1.8)中就不行了: 下面是pair.java: 如何修复这个错误? 有没有一个优雅的方法来实现几个收藏的笛卡尔产品?(假设我们有类)