Java8将对象列表转换为对象的一个​​属性列表

Nik*_*Nik 5 java lambda list java-8 java-stream

我想使用Java 8技巧在一行中执行以下操作.

鉴于此对象定义:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MyObj {
    private String id;
    private Double value;
}
Run Code Online (Sandbox Code Playgroud)

和a List<MyObj> objects,我想获得一个List<String> objectIds是第一个列表中所有id对象的列表 - 以相同的顺序.

我可以使用Java中的循环来做到这一点,但我相信在Java8中应该有一个单行的lambda可以做到这一点.我无法在网上找到解决方案.也许我没有使用正确的搜索词.

有人可以为这个变换建议一个lambda或另一个单行程吗?

xiu*_*teo 17

这应该做的伎俩:

objects.stream().map(MyObj::getId).collect(Collectors.toList());

也就是说,方法引用 ::运算符允许您引用类路径中的任何方法,并将其用作所需操作的lambda.

如评论中所述,流保留了订单.

  • @Nik比较器写得更好`objects.sort(Comparator.comparingInt(MyObj :: getValue))`.但是,是的,订单是有保证的. (4认同)
  • `comparingInt(MyObj中::的getValue()).逆转()` (3认同)