Java - 将对象列表映射到具有其属性属性值的列表

2022-08-31 22:16:19

我的 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;

}

有没有更好的方法来解决这个问题?


答案 1

我们可以使用java 8在一行代码中做到这一点

List<Long> ids = viewValues.stream().map(ViewValue::getId).collect(Collectors.toList());

有关更多信息:Java 8 - 流


答案 2

你可以使用Commons BeanUtils和 Collections在一行代码中做到这一点:
(当其他人为你完成时,为什么要编写自己的代码?

import org.apache.commons.beanutils.BeanToPropertyValueTransformer;
import org.apache.commons.collections.CollectionUtils;

...

List<Long> ids = (List<Long>) CollectionUtils.collect(viewValues, 
                                       new BeanToPropertyValueTransformer("id"));