问题描述
我想使用Java 8技巧在一行中执行以下操作。
I want to use Java 8 tricks to do the following in one line.
给定此对象定义:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MyObj {
private String id;
private Double value;
}
和列表< MyObj>对象
,我想要一个 List< String> objectIds
这是第一个列表中对象的所有 id
的列表 - 按相同的顺序排列。
and a List<MyObj> objects
, I want to get a List<String> objectIds
which is a list of all id
s of the objects in the first list - in the same order.
我可以使用Java中的循环来实现这一点,但我相信在Java8中应该有一个单行的lambda可以做到这一点。我无法在网上找到解决方案。也许我没有使用正确的搜索条件。
I can do this using a loop in Java but I believe there should be a one-liner lambda in Java8 that can do this. I was not able to find a solution online. Perhaps I wasn't using the right search terms.
有人可以为这个转换建议一个lambda或另一个单行吗?
Could someone suggest a lambda or another one-liner for this transform?
推荐答案
这应该可以解决问题:
objects.stream()。map( MyObj :: getId).collect(Collectors.toList());
表示方法参考 ::
运算符允许您引用类路径中的任何方法,并将其用作lambda以进行所需的操作。
that said, the method reference ::
operator allows you to reference any method in your classpath and use it as a lambda for the operation that you need.
正如评论中所提到的,流保留了订单。
As mentioned in the comments, a stream preserves order.
这篇关于Java8将对象列表转换为对象的一个属性列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!