根据Java中逗号分隔的字符串按字段创建枚举列表

问题描述 投票:0回答:1

请帮帮我。我有一些枚举,我需要用逗号分隔的String创建一个枚举列表。枚举是通过附加字段定义的。我有:

    public enum ReceiverFields {
    FIRST_NAME("firstName"),
    LAST_NAME("lastName"),
    MIDDLE_NAME("middleName");

    private String code;

    private ReceiverFields(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }
}

public class MainClass {

    public static void main(String[] args) {
        List<EnumFields> enumFields = null;
        enumFields = getReceiverFields("enumFirst,enumSecond,enumThird");
        System.out.println(Arrays.toString(enumFields.toArray()));

        enumFields = getReceiverFields("enumFirst,enumThird,somethingOther");
        System.out.println(Arrays.toString(enumFields.toArray()));

        enumFields = getReceiverFields("");
        System.out.println(Arrays.toString(enumFields.toArray()));
    }

    public static List<EnumFields> getReceiverFields(String receiverFields) {
        if (receiverFields == null) {
            return Collections.EMPTY_LIST;
        }

        String[] values = receiverFields.split(",");

        List<EnumFields> valuesList = new ArrayList<>(values.length);
        for (String value : values) {
            for (EnumFields enumField : EnumFields.values()) {
                if (value.equalsIgnoreCase(enumField.getCode())) {
                    valuesList.add(enumField);
                }
            }
        }

        return valuesList;
    }
}

如何使用流代替循环?

提前谢谢您:)

java-8 stream
1个回答
0
投票

代替尝试中提到的使用forEach,可以将flatMap和三元运算符用作:

public static List<ReceiverFields> getReceiverFields(String receiverFields) {
    return receiverFields == null ? Collections.emptyList() : Arrays.stream(receiverFields.split(","))
            .flatMap(value -> Arrays.stream(ReceiverFields.values())
                    .filter(enumField -> value.equalsIgnoreCase(enumField.getCode())))
            .collect(Collectors.toList());
}
© www.soinside.com 2019 - 2024. All rights reserved.