gpt4 book ai didi

Java:对象列表到字符串列表的可能转换

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

我有一堆管理器类,它们管理不同的对象,例如州、国家/地区等。 getObjects() 方法返回此类对象的列表,这些列表的值附加在不同的方法中,如下所示:

//states - StateManager.java
public String getStateMsg() {
StringBuilder msg = new StringBuilder();
if (states != null) {
for (State state : states.getObjects()) {
msg.append(state.getStateCd())).append(" ");
}
}
return msg.toString().trim();
}

//codes - CodeManager.java
public String getCodeMsg() {
StringBuilder msg = new StringBuilder();
if (codes != null) {
for (Code code : codes.getObjects()) {
msg.append(code.getCd()).append(" ");
}
}
return msg.toString().trim();
}

//countries - CountryManager.java
public String getCountriesMsg() {
StringBuilder msg = new StringBuilder();
if (countries != null) {
for (Country country : countries.getObjects()) {
msg.append(countries.get(country.getCountryCd())).append(" ");
}
}
return msg.toString().trim();
}

存在明显的代码重复,我想制定通用解决方案,其中方法采用集合(通过 getObjects() 检索)并返回字符串列表。

我发现 Guava 可以进行某种从一种类型到另一种类型的集合转换。但示例中的类(州、代码、国家/地区)不共享任何通用接口(interface)。另一方面,使用对象集合和方法名称来检索特定对象字段的值的方法意味着使用反射并不是一个好主意。

因此我有一个问题,是否可以避免所描述的代码重复并创建一个实用方法来获取对象集合并返回字符串集合?

最佳答案

如果您没有 Java 8,请使用泛型和 Guava Function :

public static <T, U> String getGenericMsg(List<T> genericList, Function<T, U> function) {
StringBuilder msg = new StringBuilder();
if (genericList != null) {
for (T genericObject : genericList) {
msg.append(function.apply(genericObject)).append(" ");
}
}
return msg.toString().trim();
}


private static Function<State, String> STATE_TO_STRING = new Function<State, String>() {
public String apply(State input) {
return input.getStateCd();
}
};

private static Function<Code, String> CODE_TO_STRING = new Function<Code, String>() {
public String apply(Code input) {
return input.getCd();
}
};

private static Function<Country, String> COUNTRY_TO_STRING = new Function<Country, String>() {
public String apply(Country input) {
return input.getCountryCd();
}
};

最后是您的客户端代码:

public void yourClientMethod() {
getGenericMsg(states, STATE_TO_STRING);
getGenericMsg(codes, CODE_TO_STRING);
getGenericMsg(countries, COUNTRY_TO_STRING);
}

关于Java:对象列表到字符串列表的可能转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40660312/

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