Java 将列表<TypeA> 转换为列表<TypeB>

Java Convert List<TypeA> to List<TypeB>

例如

class TypeA {
    private String a;
    private String b;
    private String c;
}

class TypeB {
    private String a;
}

现在我有一个 TypeA 的列表,我只需要 TypeA 的信息 a。 将 List<TypeA> 转换为 List<TypeB>

的最有效方法是什么

答案取决于你的意思 "efficient"。

// Option 1
List<TypeB> bList = new ArrayList<>();
for (TypeA a : aList) {
    bList = new TypeB(s.getA());
}

// Option 2
List<TypeB> bList = aList.stream()
        .map(TypeA::getA)
        .map(TypeB::new)
        .collect(Collectors.toList());

// Option 3
List<TypeB> bList = aList.stream().map(a -> new TypeB(s.getA())).collect(toList());

第一个 表现 最好。这是一种效率。

第二个和第三个是单句。那是另一种效率。

效率如何?在可维护性清晰度方面,我投票支持对象映射库,例如基于反射和注释的ModelMapper or MapStruct。对于 MapStruct,您可以为对象 TypeATypeB 定义一个映射,并在同一映射接口中使用相关方法。

@Mapper
public interface TypeA Mapper {

    @Mapping(target="a")
    TypeB typeAToTypeB(TypeA typeA) 

    List<TypeB> listOfTypeAToListOfTypeB(List<TypeA> list);
}

您始终可以使用 或简单的 for 循环进行简单迭代:

List<TypeB> listOfTypeB = listOfTypeA.stream()
    .map(typeA -> new TypeB(typeA.getA())
    .collect(Collectors.toList());