首页 > 解决方案 > 将枚举与列表进行比较

问题描述

我有

public enum Brand{
BMW,AUDI,FIAT;
}

private List<String> initializeCars() {
car= new ArrayList<>();
    car.add("CHRYSLER");
    car.add("BMW");
    car.add("AUDI");
    car.add("SKODA");
    car.add("FIAT");
    car.add("PORSCHE");
    return car;

我需要返回List<String>汽车列表中但不在枚举中的汽车的方法。

我试过了

public List<String> extractInvalidCars(List<String> cars) {
List<String> enumValues = new ArrayList<>();
for (ProductCategory enumBrand: Brand.values()) {
enumValues.add(String.valueOf(enumBrand));
}
for (String s : cars) {
        for (String enumValue : enumValues) {
            if (enumValue.equals(s)) {
                enumValues.remove(s);
            }
        }
    }
  return enumValues;
}

但我得到了ConcurrentModificationException

标签: javalistenums

解决方案


该错误意味着您正在同时迭代和修改一个集合......这是不正确的,另一方面,不要混合类型......枚举是枚举,字符串是字符串

我的建议

. 将枚举转换为字符串列表。在汽车和新的 string_enums 列表之间做一个交集

例子:

List<String> list = Stream.of(Brand.values()).
     map(Brand::toString).collect(Collectors.toList());

那么你可以做

cars.removeAll(list);

推荐阅读