作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抽象作为方法,使用 lamda 表达式如何合并在 Java 中将枚举转换为映射
public Collection<Map<String, String>> getAllStoreTypeList() {
Collection<ShopTypeEnum> shopTypeEnums = getAllStoreTypeEnus();
List<Map<String, String>> result = shopTypeEnums.stream().map(e -> {
Map<String, String> map = new HashMap();
map.put(VALUE, e.getValue());
map.put(NAME, e.name());
map.put(TAG_PROP_TYPE, TAG_TYPE);
return map;
}).collect(Collectors.toList());
return result;
}
public Collection<Map<String, String>> getAllShopBussinessList() {
Collection<ShopBusinessEnum> shopBusinessEnums = getShopBusinessEnus();
List<Map<String, String>> result = shopBusinessEnums.stream().map(e -> {
Map<String, String> map = new HashMap();
map.put(VALUE, e.getValue());
map.put(NAME, e.name());
map.put(TAG_PROP_TYPE, TAG_TYPE);
return map;
}).collect(Collectors.toList());
return result;
}
ShopTypeEnum
和 ShopBusinessEnum
声明
public enum ShopBusinessEnum implements EnumValueWare {
beauty("美容"),
maintenance("养护"),
fix("维修"),
paint("喷漆"),
metalPlate("钣金"),
certificate("办证"),
violation("违章"),
insurance("保险"),
check("例检"),
boutique("精品"),
repair("抢修"),
vehicleParts("全车件"),
battery("电瓶"),
tire("轮胎"),
decoration("装潢"),
conversion("改装");
private static final Map<String, ShopBusinessEnum> LOOKUP = new LinkedHashMap<>();
static {
for (ShopBusinessEnum shopBusinessEnum : EnumSet.allOf(ShopBusinessEnum.class)) {
LOOKUP.put(shopBusinessEnum.value, shopBusinessEnum);
}
}
private String value;
ShopBusinessEnum(String value) {
this.value = value;
}
public void setValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public static ShopBusinessEnum fromValue(String value) {
return LOOKUP.get(value);
}
public static Map<String, ShopBusinessEnum> getLOOKUP() {
return LOOKUP;
}
}
public enum ShopTypeEnum implements EnumValueWare {
_4s("4s店"),
repairShop("维修厂"),
chainStore("连锁店"),
quickRepaired("快修快保店"),
insurancePainting("钣金喷漆"),
carBeauty("汽车美容"),
onlyTire("轮胎专营"),
onlyBattery("电瓶专营"),
modifiedStore("改装店");
private static final Map<String, ShopTypeEnum> LOOKUP = new LinkedHashMap<>();
static {
for (ShopTypeEnum shopTypeEnum : EnumSet.allOf(ShopTypeEnum.class)) {
if (shopTypeEnum.ordinal() == 0) {
shopTypeEnum.setValue(shopTypeEnum.value.replace("_", ""));
}
LOOKUP.put(shopTypeEnum.value, shopTypeEnum);
}
}
private String value;
ShopTypeEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public static ShopTypeEnum fromValue(String value) {
return LOOKUP.get(value);
}
public static Map<String, ShopTypeEnum> getLOOKUP() {
return LOOKUP;
}
}
// common interface
public interface EnumValueWare {
String getValue();
}
//调用
public Collection<Map<String, String>> get(Supplier<Collection<? extends Enum<? extends EnumValueWare>>> supplier) {
return supplier.get().stream().map(e -> {
Map<String, String> map = new HashMap();
map.put(VALUE, e.getValue());// error can not resolve method getValue
map.put(NAME, e.name());
map.put(TAG_PROP_TYPE, TAG_TYPE);
return map;
}).collect(Collectors.toList());
}
最佳答案
您可以使用Supplier<Collection<? extends Enum<?>>>
获取要迭代的集合。
public Collection<Map<String, String>> get(Supplier<Collection<? extends Enum<?>>> supplier) {
return supplier.get().stream().map(e -> {
Map<String, String> map = new HashMap<>();
// populate
return map;
}).collect(Collectors.toList());
}
调用它,
object.get(() -> getAllStoreTypeEnus());
object.get(() -> getShopBusinessEnus());
我注意到您正在使用 e.getValue()
这不是 Enum
的一部分界面。
我假设有一个通用接口(interface)
interface ValueAware {
String getValue();
}
enum ShopTypeEnum implements ValueAware { ... }
enum ShopBusinessEnum implements ValueAware { ... }
因此您可以将参数类型缩小为
Supplier<Collection<? extends Enum<? extends ValueAware>>>
否则,您将收到编译错误
map.put(VALUE, e.getValue());
关于java - 如何将这两种方法重构为一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57409330/
我是一名优秀的程序员,十分优秀!