すべての列挙値を繰り返し処理する必要があります。それらがint( "input
")を構築するために使用されたかどうかを確認し、そうであればそれらをセット(usefulEnums
)に追加します。ストリーム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's Secret:要素が 'TestEnum'のようなenum定数である場合、代わりに' Collectors.toCollection(() - > EnumSet.noneOf(TestEnum.class)) 'を使うのが好ましいかもしれません。述語にマッチする 'enum'定数は、単純な単純な解決策を持っています。 – Holger