请帮帮我。我有一些枚举,我需要用逗号分隔的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;
}
}
如何使用流代替循环?
提前谢谢您:)
代替尝试中提到的使用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());
}