列挙型があるとしましょう:
enum EnumDemo{
A1,
A2,
A3,
B1,
B2,
B3,
C1,
C2,
C3
}
複数の EnumDemo 要素を含むことができる enumset を作成するには、どのアプローチを使用する必要がありますが、すべてが 1 つのグループからのものである必要があります。
{A1, B2, C1}、{B1, C2}、ただし {A1, A3, B1, C1} は除く
どんな考えでも大歓迎です:)
列挙型があるとしましょう:
enum EnumDemo{
A1,
A2,
A3,
B1,
B2,
B3,
C1,
C2,
C3
}
複数の EnumDemo 要素を含むことができる enumset を作成するには、どのアプローチを使用する必要がありますが、すべてが 1 つのグループからのものである必要があります。
{A1, B2, C1}、{B1, C2}、ただし {A1, A3, B1, C1} は除く
どんな考えでも大歓迎です:)
メソッドを使用してセットを生成できますEnumSet.of
。これは、最も簡単で読みやすいものです。
Set<EnumDemo> setA = EnumSet.of(EnumDemo.A1, EnumDemo.A2, EnumDemo.A3);
Set<EnumDemo> setB = EnumSet.of(EnumDemo.B1, EnumDemo.B2, EnumDemo.B3);
Set<EnumDemo> setB = EnumSet.of(EnumDemo.C1, EnumDemo.C2, EnumDemo.C3);
そこからCollections
、ユニオンまたは差分を使用して、必要なさまざまなセットを生成するために使用できます。
A1
すでに含まれているセットに を追加できるという問題を回避したい場合は、ロジックを使用して自分で処理するか、それぞれのメンバーのみを含むA2
3 つの異なる Enum 型 ( EnumA
、EnumB
、 ) を作成する必要があります。EnumC
所属するグループの各列挙型要素 ID を保持できます。そして、この ID に基づいて列挙型のグループを作成します。
enum EnumDemo{
A1(0),
A2(0),
A3(0),
B1(1),
B2(1),
B3(1),
C1(2),
C2(2),
C3(2);
private int groupId;
private EnumDemo(int groupId) {
this.groupId = groupId;
}
public static Set<EnumDemo> getGroup(int groupId) {
Set<EnumDemo> group = EnumSet.noneOf(EnumDemo.class);
for (EnumDemo value : values()) {
if (value.groupId == groupId) {
group.add(value);
}
}
return group;
}
}
このアプローチは、グループが静的で、時間の経過とともに変化しない場合に適しています。また、列挙型を作成Group
して、id の int の代わりに使用することもできます。またgroupId
、アプリで要素を動的に変更することもできますが、それが良いアプローチかどうかはわかりません。
enum
それらを異なるタイプに分けるのはどうですか?
public interface EnumDemo {
}
enum AEnumDemo implements EnumDemo { A1, A2, A3 }
enum BEnumDemo implements EnumDemo { B1, B2, B3 }
enum CEnumDemo implements EnumDemo { C1, C2, C3 }
EnumSet<? extends EnumDemo>
その後、セットのタイプとして使用できます。
EnumSet<? extends EnumDemo> demos1 = EnumSet.allOf(AEnumDemo.class);
EnumSet<? extends EnumDemo> demos2 = EnumSet.allOf(BEnumDemo.class);
EnumSet<? extends EnumDemo> demos3 = EnumSet.of(AEnumDemo.A1, AEnumDemo.A3);
EnumSet<? extends EnumDemo> demos4 = EnumSet.of(BEnumDemo.B1, BEnumDemo.B2, BEnumDemo.B3);
EnumSet<? extends EnumDemo> demos5 = EnumSet.of(AEnumDemo.A1, BEnumDemo.B2); // compile error