检查属性是否等于字符串值列表

Checking if an attribute is equal to a list of string values

根据业务需求,我不需要检查属性的值是否等于给定字符串值的列表。 我想知道更好的方法是什么,以防万一有一天需要添加新的价值。这些值是否应存储在 table?

List<String> values = new ArrayList<>();
values.add("value1");
values.add("value2");
values.add("value3");

if(values.contains(brand){
// if the brand contains the given values
// implement a specific logic
}

谢谢

你可以这样做。如果有 Brand class 返回一个不可变的属性列表。

Brand brand = new Brand(...);
List<String> values = new ArrayList<>();
values.add("value1");
values.add("value2");
values.add("value3");
if(brand.getAtrributes().containsAll(values)) {
    // do something.
}

但是我认为,最好使用 EnumSet 并将属性定义为枚举。

enum Attr {VALUE1, VALUE2, VALUE3,VALUE4, VALUE5};
EnumSet<Attr> attr = EnumSet.of(Attr.VALUE1, Attr.VALUE2, Attr.VALUE3, Attr.VALUE4, Attr.VALUE5);

if(attr.contains(Attr.VALUE1)) {
   // do something.
}

还有一个 containsAll 方法以及其他可能有用的方法。

  • 创建一个包含一组枚举的记录
  • 创建一个值为 2-4 的实例。
  • 并使用范围特征进行验证。
record Brand(EnumSet<Attr> getAttributes){}
Brand brand = new Brand(EnumSet.of(Attr.VALUE2,Attr.VALUE3, Attr.VALUE4));

EnumSet<Attr> required = EnumSet.range(Attr.VALUE2,Attr.VALUE4);

if (brand.getAttributes().containsAll(required)) {
    System.out.println("Good to go");
}

版画

Good to go.