java - 如何组合列表中的其他项目来为列表元素中的项目创建子集?

标签 java memory-management collections subset

假设我有一个 ArrayList,其中包含 [a, b, c, d, ....] 等字符串。任何人都可以帮助我提供一个示例代码,我怎样才能得到包含此列表中所有可能的功率子集的结果,其中包括该列表中的特定字符串(除了单个子集和空子集)?

例如:如果我想从示例列表中获取包括 a 在内的所有功率子集,那么输出将是:

[a,b], [a,c], [a,d], [a,b,c], [a,b,d], [a,c,d] without the empty and single subset([a])

同样,如果我想要 b 那么输出将是:

[b,a], [b,c], [b,d], [b,a,c], [b,a,d], [b,c,d] without the empty and single subset([b])

由于示例列表中的所有项目都是字符串,因此当子集太丰富时,它们可能会出现内存问题。因为我需要一次将单个字符串的子集保留在内存中。就像为 a 创建子集一样,我需要这些子集进行进一步处理,然后删除它们,然后为 b 等等。所以我还需要帮助了解这种情况的优化解决方案是什么?

我需要 Java 方面的帮助。由于我不太擅长Java,如果有任何错误请原谅我!

最佳答案

如果总是只有一个特定元素,我建议从源集中删除目标元素,在剩余的集中使用 Guava 的 Sets.powerSet ,然后将目标元素添加到返回的集合。类似...

Set<String> elems = Sets.newHashSet(set);
elems.remove(target);
Set<Set<String>> powerSet = Sets.powerSet(elems);
Collection<Set<String>> subsetsWithTarget = Collections2.transform(
    powerSet, new Function<Set<String>, Set<String>>() {
  public Set<String> apply(Set<String> setWithoutTarget) {
    return Sets.union(setWithoutTarget, Collections.singleton(target));
  }
});

(披露:我为 Guava 做出了贡献。)

关于java - 如何组合列表中的其他项目来为列表元素中的项目创建子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159733/

相关文章:

java - 哪些面向 GlassFish 2.1 和 NetBeans 6.7 的技术?

java - 确定每个整数在输入(数组)中出现的次数

c - 使用 malloc 分配页面时发生内存泄漏

c# - Dictionary<TKey, TValue> 中的键是不可变的吗?

java - 如何以特定定义的排序顺序有效读取 csv 列表?

java - 不可用的共享库 - INSTALL_FAILED_MISSING_SHARED_LIBRARY

java - 使用java计算csv

c - 是否有一些 "free-able"内存

iOS - 使用 CGImageRetain 和 CGI​​mageRelease 进行图像管理

java - Collections.sort() 期间出现异常