我需要使用函数式编程将这两个方法合并在一起,但我不熟悉它,无论如何都要这样做吗?
private String getCsvHeader(Object obj) {
Field[] fields = obj.getClass().getFields();
StringBuilder sb = new StringBuilder();
String prefix = "";
for (Field field : fields) {
sb.append(prefix).append(field.getName());
prefix = ",";
}
return sb.toString();
}
private String getCsvString(Object obj) throws IllegalAccessException {
Field[] fields = obj.getClass().getFields();
StringBuilder sb = new StringBuilder();
String prefix = "";
for (Field field : fields) {
sb.append(prefix).append(field.get(obj));
prefix = ",";
}
return sb.toString();
}
答案 0 :(得分:0)
private String getCsv(Object obj, boolean isHeader) throws IllegalAccessException
{
Field[] fields = obj.getClass().getFields();
StringBuilder sb = new StringBuilder();
String prefix = "";
for (Field field : fields)
{
if (isHeader)
{
sb.append(prefix).append(field.getName());
}
else
{
sb.append(prefix).append(field.get(obj));
}
prefix = ",";
}
return sb.toString();
}
答案 1 :(得分:0)
这个聚会真的晚了,但另一种可能的选择是创建一个方法,例如,getFieldString
接受一个 Function
函数接口,如下所示,从而抽象函数之外的行为并保持它通用。
private String getFieldString(Object obj, Function f){
Field[] fields = obj.getClass().getFields();
StringBuilder sb = new StringBuilder();
String prefix = "";
for (Field field : fields) {
sb.append(prefix).append(f.apply(field));
prefix = ",";
}
return sb.toString();
}
然后我们可以在调用期间提供行为。
Function<Field, String> f1 = (field) -> field.getName();
Function<Field, Object> f2 = (field) -> field.get(obj);
fc.getFieldString(obj, f1);
fc.getFieldString(obj, f2);
通过这种方式,方法 getFieldString
可以合理地避免在将来出现新需求时需要修改。