将Enum值转换为逗号分隔String的最有效方法

Dev*_*per 0 java string enums

我有一个java类,我在其中存储一个枚举.(显示在这个问题的底部)在这个枚举中,我有一个名为toCommaSeperatedString()的方法,它返回一个逗号分隔的枚举值String.我在这里阅读了一些关于性能的信息后,我正在使用StringBuilder .

我将这个枚举值转换为commaSeperatedString的方式是这样做的最有效方式,如果是这样,那么在String的最后一个字符处删除额外逗号的最有效方法是什么?

例如,我的方法返回,123, 456,但我更喜欢123, 456.如果我想返回,PROPERTY1, PROPERTY2我可以很容易地使用Apache Commons库StringUtils.join(),但是,getValue当我迭代String数组时,我需要通过调用方法来降低一级.

public class TypeEnum {
    public enum validTypes {
        PROPERTY1("123"),
        PROPERTY2("456");

        private String value;

        validTypes(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

        public static boolean contains(String type) {
            for (validTypes msgType : validTypes.values()) {
                if (msgType.value.equals(type)) {
                    return true;
                }
            }
            return false;
        }

        public static String toCommaSeperatedString() {
            StringBuilder commaSeperatedValidMsgTypes = new StringBuilder();
            for(validTypes msgType : validTypes.values()) {
                commaSeperatedValidMsgTypes.append(msgType.getValue() + ", ");
            }
            return commaSeperatedValidMsgTypes.toString();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*ner 14

我不担心效率.只要你不以疯狂的方式做到这一点就足够简单了.如果这是代码中最重要的性能瓶颈,我会感到惊讶.

我会做这样的事情:

return Arrays.stream(TypeEnum.values())
      .map(t -> t.value)
      .collect(Collectors.joining(','));
Run Code Online (Sandbox Code Playgroud)

如果你想要缓存它; 但这可能不会产生巨大的影响.

  • 您也可以直接从枚举值创建Stream:Arrays.stream(TypeEnum.values())。map(t-> t.value).collect(Collectors.joining(','))` (2认同)