*
字符转换为true,其他所有字符都为false。
这个答案显示了如何转换为Boolean [],但我试图转换为标量布尔数组。
java8 lambda: convert a String of 0's and 1's to basic array of booleans
答案 0 :(得分:7)
如果要求只是转换为描述的布尔数组并使用流,您可以这样做:
boolean[] result = new boolean[string.length()];
IntStream.range(0, string.length()).forEach(n -> result[n] = (string.charAt(n)=='*'));
答案 1 :(得分:2)
考虑使用BitSet
代替,这是更有效的存储结构
BitSet bs = IntStream.range(0, string.length())
.filter(i -> string.charAt(i)=='*')
.collect(BitSet::new, BitSet::set, BitSet::or);
您可以使用bs.get(index)
来测试这些位,这不比array[index]
差。
请注意,BitSet
也有一个stream()
方法,它会生成IntStream
个true
个索引,相当于我们用于构建{BitSet
的流。 1}}。因此,如果你在某个时刻没有数组就无法逃脱,你可以像
boolean[] array = new boolean[string.length()];
bs.stream().forEach(i -> array[i]=true);