NDT*_*DTS 2 java enums arraylist java-8
要明确我没有任何问题,并且真的不需要帮助,但我还是想问:
假设我们有一个String数组
String[] sarr = new String[]{"POTATO", "TOMATO"};
Run Code Online (Sandbox Code Playgroud)
我们有一个枚举
public enum Food{POTATO, TOMATO, PIZZA}
Run Code Online (Sandbox Code Playgroud)
如果我想检查是否所有的字符串sarr
中存在Food
,我会做到以下几点:
ArrayList<String> foodstrings = new ArrayList<>();
Arrays.asList(Food.values()).forEach((in) -> foodstrings.add(in.toString()));
if (!foodstrings.containsAll(Arrays.asList(sarr))) doStuff();
Run Code Online (Sandbox Code Playgroud)
有没有办法在更少的代码行中做到这一点?或者只是一个更优雅的方式?
您想确定数组中的所有元素是否都包含在食物名称列表中.
一种可能的解决方案是将食物名称转换为a Set
(具有O(1)contains
); 然后,我们需要确定数组中的所有元素是否都包含在此集合中:
public static void main(String[] args) {
String[] sarr = new String[]{"POTATO", "TOMATO"};
Set<String> set = Arrays.stream(Food.values()).map(Enum::name).collect(Collectors.toSet());
boolean result = Arrays.stream(sarr).allMatch(set::contains);
}
Run Code Online (Sandbox Code Playgroud)
在您当前的解决方案中,您正在改变外部变量forEach
,这是一种不好的做法.