如何限制用户使用 Java 流从列表中仅选择两个枚举?
How to limit user to choose just two enums from list using Java Streams?
我有一个枚举 class,用户最多可以从中选择 2 个选项。
如果他选择超过 2 个,则应显示一条错误消息。
我想使用 Java 流来执行此操作。我仍在努力弄清楚它们是如何工作的。
到目前为止,我想出了这段代码:
public enum UserSkills {
HARD_WORKNG("HARD_WORKNG"),
ON_TIME("ON_TIME"),
HONEST("HONEST");
public final String value;
UserSkills(String value) {
this.value = value;
}
@Override
public String toString() {
return name() + "[" + value + "]";
}
public static List < UserSkills > of (String userSkills) {
notNull(userSkills, "userSkills cannot be null");
return Arrays.stream(values())
.flatMap(s - > {
if (values().length > 3) {
throw new IllegalArgumentException(String.format("you can only choose up to 3 user skills", userSkills));
} else {
}
}).collect(Collectors.toList());
}
}
我不确定如何完成任何建议。
似乎方法 of
应该接受可变参数 String ... userSkills
(或者输入字符串应该以某种方式拆分以识别多个枚举值):
public static List<UserSkills> of (String ... userSkills) {
List<UserSkills> result = Arrays.stream(userSkills)
.filter(Objects::nonNull)
.map(UserSkills::valueOf) // throws IllegalArgumentException no enum constant
.distinct()
.collect(Collectors.toList());
if (result.size() > 2) {
throw new IllegalArgumentException("Only 2 skills can be selected");
}
return result;
}
测试:
List<UserSkills> skills = UserSkills.of(null, "HARD_WORKNG", "HONEST", "HARD_WORKNG", "ON_TIME");
Exception in thread "main" java.lang.IllegalArgumentException: Only 2 skills can be selected
List<UserSkills> skills = UserSkills.of(null, "HARD_WORKNG", "HONEST", "HARD_WORKNG");
System.out.println(skills);
输出:
[HARD_WORKNG[HARD_WORKNG], HONEST[HONEST]]
我有一个枚举 class,用户最多可以从中选择 2 个选项。 如果他选择超过 2 个,则应显示一条错误消息。
我想使用 Java 流来执行此操作。我仍在努力弄清楚它们是如何工作的。
到目前为止,我想出了这段代码:
public enum UserSkills {
HARD_WORKNG("HARD_WORKNG"),
ON_TIME("ON_TIME"),
HONEST("HONEST");
public final String value;
UserSkills(String value) {
this.value = value;
}
@Override
public String toString() {
return name() + "[" + value + "]";
}
public static List < UserSkills > of (String userSkills) {
notNull(userSkills, "userSkills cannot be null");
return Arrays.stream(values())
.flatMap(s - > {
if (values().length > 3) {
throw new IllegalArgumentException(String.format("you can only choose up to 3 user skills", userSkills));
} else {
}
}).collect(Collectors.toList());
}
}
我不确定如何完成任何建议。
似乎方法 of
应该接受可变参数 String ... userSkills
(或者输入字符串应该以某种方式拆分以识别多个枚举值):
public static List<UserSkills> of (String ... userSkills) {
List<UserSkills> result = Arrays.stream(userSkills)
.filter(Objects::nonNull)
.map(UserSkills::valueOf) // throws IllegalArgumentException no enum constant
.distinct()
.collect(Collectors.toList());
if (result.size() > 2) {
throw new IllegalArgumentException("Only 2 skills can be selected");
}
return result;
}
测试:
List<UserSkills> skills = UserSkills.of(null, "HARD_WORKNG", "HONEST", "HARD_WORKNG", "ON_TIME");
Exception in thread "main" java.lang.IllegalArgumentException: Only 2 skills can be selected
List<UserSkills> skills = UserSkills.of(null, "HARD_WORKNG", "HONEST", "HARD_WORKNG");
System.out.println(skills);
输出:
[HARD_WORKNG[HARD_WORKNG], HONEST[HONEST]]