如何使用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是的问题:没有比转换为布尔[]
或列表
然后将其转换为基元布尔[]
,您必须自己编写该部分(或从第三方库获取)。转换为布尔
基元类型的数组是一种资源浪费。使用位集
更好。您需要布尔[]
有什么特别的原因吗?霍尔格,我回答这个问题的速度非常慢(实际上我休息得很慢),但我的想法正是这样。霍尔格,我回答这个问题的速度非常慢(实际上我休息得很慢),但我的想法正是这样。