在 Java 8 中,在没有预定义方法的情况下将集合转换为其他集合类型

2022-09-02 13:06:32

我正在寻找的是一种使用映射将一种类型的集合转换为另一种类型的集合的方法,而无需将对象A转换为对象B的预定义函数/函数接口。

for (ObjectA objA : collectionA) {
    ObjectB objB = new ObjectB();
    objB.setId(objA.getId());
    collectionB.add(objB);
}

我正在寻找以下几行中的东西:

List<ObjectB> collectionB = collectionA.stream().map(objA -> {
    ObjectB objB = new ObjectB();
    objB.setId(objA.getId());
    return objB;
});

这当然不起作用,但你明白了我想要做的要点。


答案 1

执行映射后,必须收集映射的对象:

List<ObjectB> collectionB = collectionA.stream().map(objA -> {
    ObjectB objB = new ObjectB();
    objB.setId(objA.getId());
    return objB;
}).collect(Collectors.toList());

答案 2

您的示例代码只是缺少终端操作,以将从操作返回的元素收集到:collectStream<ObjectB>mapList<ObjectB>

List<ObjectB> collectionB = collectionA.stream().map(objA -> {
    ObjectB objB = new ObjectB();
    objB.setId(objA.getId());
    return objB;
}).collect(Collectors.toList());

如果向类中添加一个接受类型参数并设置 ID 的构造函数,则可以简化代码:ObjectBObjectA

即,在您中添加此构造函数:ObjectB

public ObjectB (ObjectA objA)
{
    setId(objA.getId());
}

你的代码变成:

List<ObjectB> collectionB = collectionA.stream()
                                       .map(ObjectB::new)
                                       .collect(Collectors.toList());