【发布时间】:2021-12-01 17:15:21
【问题描述】:
当前代码发送List<String>,但如果所有值都匹配则返回枚举
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public enum Rara {
MA_ON("ST"),
MA_MAN("ST", "YS"),
MA_IP("ST", "YS", "IC"),
CODE("RC");
Rara(String... codes) {
this.codes = List.of(codes);
}
private List<String> codes;
public static Optional<Rara> getValue(List<String> values){
return Arrays.stream(values())
.filter(rara -> rara.codes.containsAll(values))
.findFirst();
}
}
public class Main {
public static void main(String args[]){
System.out.println(Rara.getValue(Arrays.asList("ST", "YS")));
// Optional[MA_MAN]
System.out.println(Rara.getValue(Arrays.asList("ST")));
// Optional[MA_ON]
}
}
但现在的要求是,如果我们得到 List,那么应该返回最大匹配枚举
System.out.println(Rara.getValue(Arrays.asList("ST", "YS", "IC", "BLABLA")));
//Should return MA_IP
System.out.println(Rara.getValue(Arrays.asList("ST", "Bla", "Blabla", "BLABLA")));
//Should return MA_ON
注意:如果 ST 和 RC 或任何冲突,我们需要选择第一个。 (像ST、RC我们可以选择MA_ON)
谁能建议如何在 getValue 中实现相同的枚举? (如果我添加包含,则代替 containsALL 则它不起作用。不确定它是否需要一些 maxmatch 等)
【问题讨论】:
-
Arrays.asList("ST", "RC")这样的参数呢?这种情况可能吗?如果是,结果应该是什么(MA_ON、CODE或其他)? -
@Pshemo:是的,我问过这个,然后他们说选择第一个