使用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());
}
答案 0 :(得分:3)
您可以使用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 ValueAware {
String getValue();
}
enum ShopTypeEnum implements ValueAware { ... }
enum ShopBusinessEnum implements ValueAware { ... }
所以您可以将参数类型缩小到
Supplier<Collection<? extends Enum<? extends ValueAware>>>
否则,您将收到编译错误
map.put(VALUE, e.getValue());
答案 1 :(得分:0)
也许只需更改即可:
Collection<? extends Enum> theEnums = ...
收件人:
public Collection<Map<String, String>> getProperty(Collection<? extends Enum> theEnums) {
return theEnums.stream().map(....
因为这样您仍然可以处理某种枚举,但是您与实际类型无关。因此,您应该能够很好地使用一段代码来迭代这样的集合。
赞:
Main