У меня есть некоторое перечисление, и мне нужно создать список перечислений из строки через запятую. Enum определяется через дополнительное поле. У меня есть:
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;
}
}
Как я могу использовать поток вместо цикла For?
Редактировать ( изкомментарии ):
Кажется, я решил:
List<EnumFields> valuesList = new ArrayList<>(values.length);
Arrays.stream(values).forEach(v -> (Arrays.stream(EnumFields.values())
.filter(e -> (e.getCode().equalsIgnoreCase(v)))
.findFirst()) .ifPresent(valuesList::add)); Right?