我遇到过一种常见情况,我有一个对象列表,需要生成一个带有单个属性的逗号分隔字符串,然后每个属性都用单引号引起来。
2 示例
public String partIDsToString(List<Part> parts){
StringBuilder sb = new StringBuilder();
for(Part part : parts)
sb.append("'"+part.getPartNumber() + "',");
return sb.substring(0,sb.length()-1);
}
public String companyIDsToString(List<Company> parts){
StringBuilder sb = new StringBuilder();
for(Company c : parts)
sb.append("'"+c.getId() + "',");
return sb.substring(0,sb.length()-1);
}
我将来需要创建更多这样的方法,并且想知道是否有一种方法可以概括此功能,我正在寻找类似的方法。
public String objectPropertyToString(List<Object> list, Method getProperty){
StringBuilder sb = new StringBuilder();
for(Object obj: list)
sb.append("'"+obj.getProperty() + "',");
return sb.substring(0,sb.length()-1);
}
List<Company> companies = getCompaniesList();//not important
String result = objectPropertyToString(companies , Company::getId);
List<Part> parts= getPartsList();//not important
String result = objectPropertyToString(parts, Part::getPartNumber);
这可以使用方法引用/lambda 或任何其他方式来完成吗?
Stream.map() and Collectors.joining()你的朋友在这里吗?
companies.stream()
.map(Company::getId)
.map(s -> "'" + s + "'")
.collect(joining(","));
您可以创建一个辅助方法,但在我看来,上面的内容足够简洁,不值得:
static <T> String mapAndJoin(Collection<T> c, Function<T,String> f){
return c.stream()
.map(f)
.map(s -> "'" + s + "'")
.collect(joining(","));
}
mapAndJoin(companies, Company::getId);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)