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,您可以为对象 TypeA
和 TypeB
定义一个映射,并在同一映射接口中使用相关方法。
@Mapper
public interface TypeA Mapper {
@Mapping(target="a")
TypeB typeAToTypeB(TypeA typeA)
List<TypeB> listOfTypeAToListOfTypeB(List<TypeA> list);
}
您始终可以使用 java-stream 或简单的 for 循环进行简单迭代:
List<TypeB> listOfTypeB = listOfTypeA.stream()
.map(typeA -> new TypeB(typeA.getA())
.collect(Collectors.toList());
例如
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,您可以为对象 TypeA
和 TypeB
定义一个映射,并在同一映射接口中使用相关方法。
@Mapper
public interface TypeA Mapper {
@Mapping(target="a")
TypeB typeAToTypeB(TypeA typeA)
List<TypeB> listOfTypeAToListOfTypeB(List<TypeA> list);
}
您始终可以使用 java-stream 或简单的 for 循环进行简单迭代:
List<TypeB> listOfTypeB = listOfTypeA.stream()
.map(typeA -> new TypeB(typeA.getA())
.collect(Collectors.toList());