以下是问题的一些示例代码
class Foo {
String a()
String b()
}
Bar的初始版本
class Bar {
List<Foo> foos = new ArrayList<Foo>()
String getAs() {
def builder = new StringBuilder()
foos.each {
builder.append it.a()
builder.append System.getProperty("line.separator")
}
builder.toString()
}
String getBs() {
def builder = new StringBuilder()
foos.each {
builder.append it.b()
builder.append System.getProperty("line.separator")
}
builder.toString()
}
}
很明显我想重构这个。我目前有这个:
class Bar {
List<Foo> foos = new ArrayList<Foo>()
String getAs() {
collectSections "a"
}
String getBs() {
collectSections "b"
}
private String collectSections(String method) {
def builder = new StringBuilder()
foos.each {
builder.append it."${method}"()
builder.append System.getProperty("line.separator")
}
builder.toString()
}
}
这是最好的常规方法吗?
答案 0 :(得分:1)
我会这样做,因为它抽象了收集算法并使用标准的Groovy集合操作方法。
class Bar {
List<Foo> foos = new ArrayList<Foo>()
String collect(values) {
values.inject(new StringBuilder()) { b, val ->
b << val + System.getProperty("line.separator")
}.toString()
}
String getAs() {
collect foos*.a()
}
String getBs() {
collect foos*.b()
}
}