【发布时间】:2015-01-16 22:49:02
【问题描述】:
在给定您想要的最大布尔值数的情况下,生成可能的布尔值组合的最优雅的方法是什么?
例如:
bool(1) -> [false], [true]
bool(2) -> [false, false], [false, true], [true, false], [true, true]
...
这是我当前的实现:
public static List<Boolean[]> bool(int n) {
return IntStream.range(0, (int) Math.pow(2, n))
.mapToObj(i -> StringUtils.leftPad(Integer.toBinaryString(i), n, '0').chars().mapToObj(c -> c != '0').toArray(Boolean[]::new))
.collect(Collectors.toList());
}
但是我不满意我使用整数,然后使用StringUtils.leftPad 和返回Boolean[] 而不是boolean[] 的map 映射到二进制。
有没有更好的方法来使用 Stream API 在单行中做到这一点?
【问题讨论】:
-
只是从零开始往上数,使用整数类型作为位域?
-
这不是他在做的吗?将 int->binary 字符串,然后 char by char 转换为 boolean。
-
很惊讶在公共空间中没有这样的方法
标签: java java-8 java-stream