使用Google Collections。示例:
Function<ViewValue, Long> transform = new Function<ViewValue, Long>() {
@Override
public Long apply(ViewValue from) {
return from.getId();
}
};
List<ViewValue> list = Lists.newArrayList();
List<Long> idsList = Lists.transform(list, transform);
更新:
在Java 8中,您不需要Guava。您可以执行以下操作:
import com.example.ViewValue;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
Function<ViewValue, Long> transform = ViewValue::getId;
List<ViewValue> source = new ArrayList<>();
List<Long> result = source.stream().map(transform).collect(Collectors.toList());
或者只需:
List<ViewValue> source= new ArrayList<>()
List<Long> result = source.stream().map(ViewValue::getId).collect(Collectors.toList())
下一次更新(在 Javaslang 更名为 Vavr 后的最后一次更新):
目前值得提到的是使用 Javaslang 库 (http://www.javaslang.io/) Vavr 库 (http://www.vavr.io/) 的解决方案。我们假设有一个包含真正对象的列表:
List<ViewValue> source = newArrayList(new ViewValue(1), new ViewValue(2), new ViewValue(2))
我们可以使用Javaslang库中的List类进行转换(长期来看,collect方法不太方便):
List<Long> result = io.vavr.collection.List.ofAll(source).map(ViewValue::getId).toJavaList()
只使用Javaslang列表,您就能看到它的威力:
io.vavr.collection.List<ViewValue> source = javaslang.collection.List.of(new ViewValue(1), new ViewValue(2), new ViewValue(3))
io.vavr.collection.List<Long> res = source.map(ViewValue::getId)
我鼓励你查看该库中可用的集合和新类型(我特别喜欢Try类型)。您可以在以下地址找到文档:http://www.javaslang.io/javaslang-docs/ http://www.vavr.io/vavr-docs/。
附注:由于Oracle公司和“Java”一词在名称中,他们不得不将库名从javaslang改为其他名称。他们决定更名为Vavr。