如何使用Java 8流将字符串转换为boolean []数组?

时间:2017-08-01 22:47:22

标签: java functional-programming java-8

*字符转换为true,其他所有字符都为false。

这个答案显示了如何转换为Boolean [],但我试图转换为标量布尔数组。

java8 lambda: convert a String of 0's and 1's to basic array of booleans

2 个答案:

答案 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()方法,它会生成IntStreamtrue个索引,相当于我们用于构建{BitSet的流。 1}}。因此,如果你在某个时刻没有数组就无法逃脱,你可以像

那样创建它
boolean[] array = new boolean[string.length()];
bs.stream().forEach(i -> array[i]=true);