转换数组并将其复制到List中

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)

有没有办法在更少的代码行中做到这一点?或者只是一个更优雅的方式?

Tun*_*aki 6

您想确定数组中的所有元素是否都包含在食物名称列表中.

一种可能的解决方案是将食物名称转换为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,这是一种不好的做法.