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



