[英]Java Generics: convert List<TypeA> to List<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>
的最有效方法是什么
答案取决于您所说的“高效”是什么意思。
// 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或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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.