如何使用Java 8 streams将字符串转换为布尔[]数组?

如何使用Java 8 streams将字符串转换为布尔[]数组?,java,functional-programming,java-8,Java,Functional Programming,Java 8,*字符转换为true,其他所有字符转换为false 这个答案显示了如何转换为布尔[],但我试图转换为标量布尔数组 如果要求仅转换为所述的布尔数组并使用流,则可以这样做: boolean[] result = new boolean[string.length()]; IntStream.range(0, string.length()).forEach(n -> result[n] = (string.charAt(n)=='*')); 如果需求只是转换为所描述的布尔数组并使用流,则可以

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

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


如果要求仅转换为所述的布尔数组并使用流,则可以这样做:

boolean[] result = new boolean[string.length()];
IntStream.range(0, string.length()).forEach(n -> result[n] = (string.charAt(n)=='*'));

如果需求只是转换为所描述的布尔数组并使用流,则可以这样做:

boolean[] result = new boolean[string.length()];
IntStream.range(0, string.length()).forEach(n -> result[n] = (string.charAt(n)=='*'));

考虑改用
位集
,这是更有效的存储结构

BitSet bs = IntStream.range(0, string.length())
                     .filter(i -> string.charAt(i)=='*')
                     .collect(BitSet::new, BitSet::set, BitSet::or);
您可以使用
bs.get(index)
测试位,这并不比
array[index]

请注意,
位集
还有一个
stream()
方法,该方法生成
IntStream
true
值的索引,相当于我们用于构造
位集
的流。因此,如果在某个点上没有阵列就无法逃脱,您可以像这样创建它

boolean[] array = new boolean[string.length()];
bs.stream().forEach(i -> array[i]=true);

考虑改用
位集
,这是更有效的存储结构

BitSet bs = IntStream.range(0, string.length())
                     .filter(i -> string.charAt(i)=='*')
                     .collect(BitSet::new, BitSet::set, BitSet::or);
您可以使用
bs.get(index)
测试位,这并不比
array[index]

请注意,
位集
还有一个
stream()
方法,该方法生成
IntStream
true
值的索引,相当于我们用于构造
位集
的流。因此,如果在某个点上没有阵列就无法逃脱,您可以像这样创建它

boolean[] array = new boolean[string.length()];
bs.stream().forEach(i -> array[i]=true);

你想使用lambdas吗?这实际上是非常困难的。我能想到的最好的解决方案是
收集然后(toList(),boxedBooleanListToArray)
或诸如此类。@travisjayday是的问题:没有比将其转换为
布尔[]
列表
然后将其转换为基本
布尔[]
更好的方法了,你必须自己编写这部分(或从第三方库获取)。转换为
布尔
基元类型的数组会浪费资源。最好使用
位集
。是否需要
布尔[]
有什么特殊原因吗?你想使用lambdas吗?这实际上是非常困难的。我能想到的最好的解决方案是
收集然后(toList(),boxedBooleanListToArray)
或类似的方法。@travisjayday是的问题:没有比转换为
布尔[]
列表
然后将其转换为基元
布尔[]
,您必须自己编写该部分(或从第三方库获取)。转换为
布尔
基元类型的数组是一种资源浪费。使用
位集
更好。您需要
布尔[]
有什么特别的原因吗?霍尔格,我回答这个问题的速度非常慢(实际上我休息得很慢),但我的想法正是这样。霍尔格,我回答这个问题的速度非常慢(实际上我休息得很慢),但我的想法正是这样。