EnumSet 的妙用,代替二进制串

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());
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容