小编典典
编辑:此答案基于以下想法:您需要对代码中其他位置的不同实体和不同属性执行类似的操作。如果您 只需
要按ID将ViewValues列表转换为Longs列表,则请坚持使用原始代码。但是,如果您想要更可重用的解决方案,请继续阅读…
我会为投影声明一个接口,例如
public interface Function
{
public Result apply(Arg arg);
}
然后,您可以编写一个通用转换方法:
public List convertAll(List source,
Function projection)
{
ArrayList results = new ArrayList();
for (Source element : source)
{
results.add(projection.apply(element));
}
return results;
}
然后您可以定义简单的投影,如下所示:
private static final Function ID_PROJECTION =
new Function()
{
public Long apply(ViewValue x)
{
return x.getId();
}
};
并像这样应用它:
List ids = convertAll(values, ID_PROJECTION);
(显然,使用K&R支撑和更长的行会使投影声明更短:)
坦率地说,所有这些对于lambda表达式都会更好,但是没关系…
2020-09-16