gpt4 book ai didi

java - 如何将这两种方法重构为一种方法

转载 作者:行者123 更新时间:2023-12-01 19:36:14 24 4
gpt4 key购买 nike

抽象作为方法,使用 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;
}

ShopTypeEnumShopBusinessEnum 声明

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com