java 求出给定List的元素的各种组合 有没有工具包 优雅的解决
时间: 2024-09-06 21:01:45 浏览: 43
在 Java 中,如果你需要生成给定 List 的所有可能元素组合,你可以使用递归或者集合框架如 `combinatorics` 或者 `java.util.stream` 包中的功能。一个常用的库是 Apache Commons Math,它提供了一些方便的函数用于处理组合、排列等问题。
例如,可以使用 `combinatorics` 库中的 `CombinatoricsUtils` 类来求解:
```java
import com.github.benmanes.caffeine.cache.Cache;
import com.google.common.collect.ImmutableList;
import org.apache.commons.math3.combinatorics.PermutationGenerator;
public class CombinationGenerator {
private static final Cache<Integer, PermutationGenerator> PERMUTATION_CACHE = CacheBuilder.newBuilder()
.maximumSize(100_000) // 根据实际需求调整缓存大小
.build();
public static void generateCombinations(List<String> elements, int combinationLength) {
if (combinationLength > elements.size()) {
throw new IllegalArgumentException("Combination length exceeds list size");
}
PERMUTATION_CACHE.get(combinationLength).forEach(permutation -> {
System.out.println("Combination: " + permutation);
permutation.forEach(elements::println);
});
}
}
// 使用示例
List<String> elements = ImmutableList.of("A", "B", "C");
generateCombinations(elements, 2); // 输出所有长度为2的组合
```
注意,对于较大的组合数,这种方法可能会消耗大量内存,因此建议控制缓存大小并合理选择数据结构。
阅读全文