gpt4 book ai didi

enums - 与数组上的迭代相比,使用 Arrays.stream() 是否有任何性能优势?

转载 作者:行者123 更新时间:2023-12-02 11:36:41 26 4
gpt4 key购买 nike

我需要迭代所有枚举值,检查它们是否用于构造 int (称为 input ),如果是,则将它们添加到 Set (称为 usefulEnums )。我可以使用流 API 或迭代所有枚举来完成此任务。使用 Arrays.stream() 有什么好处吗?优于迭代 values() 的传统方法大批?

   enum TestEnum { VALUE1, VALUE2, VALUE3 };

Set<TestEnum> usefulEnums = new HashSet<>();

Arrays.stream(TestEnum.values())
.filter(t -> (input & t.getValue()) != 0)
.forEach(usefulEnums::add);

for (TestEnum t : TestEnum.values()) {
if ((input & t.getValue()) != 0) {
usefulEnums.add(t);
}
}

最佳答案

如果您关心效率,您应该考虑:

Set<TestEnum> usefulEnums = EnumSet.allOf(TestEnum.class);
usefulEnums.removeIf(t -> (input & t.getValue()) == 0);

请注意,当您必须迭代所有 enum 时类型常量,使用 EnumSet.allOf(EnumType.class).stream()避免创建 EnumType.values() 的数组然而,完全是,大多数enum类型没有足够的常量来产生影响。此外,JVM 的优化器可能会删除临时数组的创建。

但是对于这个特定任务,结果应该是 Set<TestEnum> ,使用 EnumSet而不是HashSet甚至可以改善使用 Set 的后续操作。创建 EnumSet像上面的解决方案一样,保留所有常量并删除无意的常量,意味着只需初始化 long0b111 ,然后清除不匹配元素的位。

关于enums - 与数组上的迭代相比,使用 Arrays.stream() 是否有任何性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42433729/

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