gpt4 book ai didi

java - 检查是否全部为真并使用 Java 8 的单行 lambda 表达式重置 boolean [] 数组

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:16 25 4
gpt4 key购买 nike

假设我有一个巨大的 Boolean 数组flags:

Boolean[] flags = { true, false, true };    // 3 means "many"

我想在 flags 上做两件事:

  • 检查所有元素是否为true并返回一个指标;
  • 将所有元素重置为 false

使用 Java 8 的 lambda 表达式,我可以按如下方式进行:

indicator = Arrays.stream(flags).allMatch(flag -> flag);
Arrays.stream(flags).forEach(flag -> flag = false);
return indicator;

然而,此实现会扫描 flags 两次。由于 flags 很大,我不想要这个。此外,我更喜欢 lambda 方式。有没有什么方法可以用(单行)lambda 表达式实现这个 checkIfAllTrueAndReset 语义,它只扫描一次 flags


相关但不相同:What is the most elegant way to check if all values in a boolean array are true?


注意:我从评论和回答中学到了很多东西。谢谢大家!

  1. Stream 很酷,但不是
  2. BitSet(及其按位的原子对应 AtomicBitSet )更适合于此(因此被接受为答案;谢谢其他人)。
  3. 不鼓励 map(Stream 或一般的函数式编程)中的副作用。
  4. Arrays.stream(flags).forEach(flag -> flag = false)(在我的代码中)没有设置任何东西!

最佳答案

使用 BitSet 的经典示例类:

This class implements a vector of bits that grows as needed. Each component of the bit set has a boolean value.

在复杂性方面,BitSet 为每个 boolean 值使用 ~1 位,这比使用大型 Boolean 对象数组要好得多。

关于检查所有位是否已设置(true 或 false),API 提供了许多有用的方法 - 而且它们非常有效。

关于java - 检查是否全部为真并使用 Java 8 的单行 lambda 表达式重置 boolean [] 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34493660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com