美文网首页
EnumSet 的妙用,代替二进制串

EnumSet 的妙用,代替二进制串

作者: 观照_ | 来源:发表于2018-06-25 14:21 被阅读0次

EnumSet 的妙用,代替二进制串。

有时候需要用二进制串作为多个标识位,例如 1010,每一位分别代表不同的含义,此时对应位数的新增删除等操作麻烦且不直观,建议用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);
    }

    /**
     * 反序算位数,方便以后新增位
     * 
     * @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());
    }
}

相关文章

网友评论

      本文标题:EnumSet 的妙用,代替二进制串

      本文链接:https://www.haomeiwen.com/subject/jrlyyftx.html