Java8 将对象列表转换为对象的一个属性列表 [英] Java8 Transform list of object to list of one attribute of object
问题描述
我想使用 Java 8 技巧在一行中完成以下操作.
给定这个对象定义:
@Getter@Setter@NoArgsConstructor@AllArgsConstructor公共类 MyObj {私人字符串ID;私人双值;}
和 List
,我想得到一个List
是第一个列表中对象的所有 id
的列表 - 以相同的顺序.
我可以使用 Java 中的循环来做到这一点,但我相信 Java8 中应该有一个单行 lambda 可以做到这一点.我无法在网上找到解决方案.也许我没有使用正确的搜索词.
有人可以为此转换建议使用 lambda 或其他单行吗?
这应该可以解决问题:
objects.stream().map(MyObj::getId).collect(Collectors.toList());
也就是说,方法引用 ::
运算符允许您引用类路径中的任何方法,并将其用作所需操作的 lambda.>
正如评论中提到的,流会保留顺序.
I want to use Java 8 tricks to do the following in one line.
Given this object definition:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MyObj {
private String id;
private Double value;
}
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.
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.
Could someone suggest a lambda or another one-liner for this transform?
This should do the trick:
objects.stream().map(MyObj::getId).collect(Collectors.toList());
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 将对象列表转换为对象的一个属性列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!