我将 ViewValue 类定义如下:
class ViewValue {
private Long id;
private Integer value;
private String description;
private View view;
private Double defaultFeeRate;
// getters and setters for all properties
}
在我的代码中的某处,我需要将 ViewValue 实例列表转换为包含来自相应 ViewValue 的 id 字段值的列表。
我使用 foreach 循环来做到这一点:
List<Long> toIdsList(List<ViewValue> viewValues) {
List<Long> ids = new ArrayList<Long>();
for (ViewValue viewValue : viewValues) {
ids.add(viewValue.getId());
}
return ids;
}
有没有更好的方法来解决这个问题?
原文由 mgamer 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑:这个答案是基于这样的想法,即您需要对代码中其他地方的不同实体和不同属性执行类似的操作。如果您 只需 要按 ID 将 ViewValues 列表转换为 Longs 列表,请坚持使用原始代码。但是,如果您想要一个更可重用的解决方案,请继续阅读……
我会为投影声明一个接口,例如
然后你可以写一个单一的通用转换方法:
然后你可以像这样定义简单的投影:
并像这样应用它:
(显然,使用 K&R 支撑和更长的行会使投影声明更短 :)
坦率地说,如果使用 lambda 表达式,所有这些都会好很多,但没关系……