java - 将枚举与列表进行比较
问题描述
我有
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
解决方案
该错误意味着您正在同时迭代和修改一个集合......这是不正确的,另一方面,不要混合类型......枚举是枚举,字符串是字符串
我的建议
. 将枚举转换为字符串列表。在汽车和新的 string_enums 列表之间做一个交集
例子:
List<String> list = Stream.of(Brand.values()).
map(Brand::toString).collect(Collectors.toList());
那么你可以做
cars.removeAll(list);
推荐阅读
- javascript - 如何在不重新加载输入字段的情况下重置/清除输入字段
- javascript - 如何仅显示单击的 div 的边框?
- php - 模块创建 prestashop
- java - Eclipse 从 CMD 提示符找到 Java,但不是从桌面单击
- apache-kafka - 镜子制造商线程故障
- node.js - 如何在没有 elasticsearch-curator 的情况下删除所有旧索引?
- javascript - 将对象数组转换为数组数组(按属性)
- java - java.lang.RuntimeException:无法启动活动 ComponentInfo:java.lang.NumberFormatException:对于输入字符串:“4.90”
- python - 在后台运行shell命令而无需等待
- javascript - 身份验证错误后的 Firebase 用户数据