EnumSet 的妙用,代替二進(jìn)制串。
有時(shí)候需要用二進(jìn)制串作為多個(gè)標(biāo)識(shí)位,例如 1010,每一位分別代表不同的含義,此時(shí)對(duì)應(yīng)位數(shù)的新增刪除等操作麻煩且不直觀,建議用EnumSet代替。不多說,代碼如下:
/**
* 文本
* 樣式包括粗體,斜體,下劃線,中劃線等多種情況,每種情況可以并存
* 用 EnumSet 代替字符串處理
*/
public class Text {
private EnumSet<Style> set = EnumSet.noneOf(Style.class);
private String[] texts = new String[Style.values().length];
public Text() {
for (int i = 0; i < texts.length; i++) {
texts[i] = "0";
}
}
/**
* 樣式
*/
public enum Style {
BLOD(0),
ITALIC(1),
UNDERLINE(2),
MIDDLELINE(3),
;
private int val;
Style(int i) {
this.val = i;
}
public int val() {
return val;
}
}
public void add(Style... styles) {
Arrays.asList(styles).forEach(set::add);
}
public void remove(Style... styles) {
Arrays.asList(styles).forEach(set::remove);
}
public boolean contains(Style style) {
return set.contains(style);
}
/**
* 反序算位數(shù),方便以后新增位
*
* @return
*/
public String get() {
set.forEach(e -> {
texts[e.val()] = "1";
});
return StringUtils.join(Lists.reverse(Arrays.asList(texts)), "");
}
public static void main(String[] args) {
Text text = new Text();
text.add(Style.BLOD, Style.ITALIC);
System.out.println(text.contains(Style.BLOD));
System.out.println(text.get());
}
}