我需要迭代所有枚舉值,檢查它們是否用於構造int(稱爲input
),如果是,則將它們添加到Set(稱爲usefulEnums
)。我可以使用Stream API或迭代所有枚舉來完成此任務。使用Arrays.stream()
比使用迭代values()
數組的傳統方法有什麼好處?在數組上迭代使用Arrays.stream()是否有任何性能優勢?
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);
}
}
完美!謝謝:) – user1071840
在通常情況下,你只需要一個'Set',而不是'HashSet',具體的'Collectors.toSet()'是最好的。 –
@ Solomonoff的祕密:當元素是枚舉常量時,比如'TestEnum',最好使用'Collectors.toCollection(() - > EnumSet.noneOf(TestEnum.class))'代替,儘管獲取所有與謂詞匹配的'enum'常量具有更簡單的直接解決方案... – Holger