给定 Foo myFoos 列表,我需要将它们映射到不同类的集合,例如 Bar。我现在这样做:
List<Bar> myBars = new...
for(Foo f : foos) {
Bar b = new Bar();
b.setAProperty(f.getProperty);
b.setAnotherProp(f.getAnotherProp);
myBars.add(b);
}
那么,有没有更简单的方法来做到这一点?当然这很简单,但我想知道是否有任何魔法可以将 foos 变成 bars 而无需手动遍历列表,特别是因为我的输入列表可能很大。
如果没有,你们知道编译器是否做了任何优化吗?我主要担心性能。
谢谢!
--
拉普尔
最佳答案
您无法真正避免遍历列表,因为您必须转换每一项!
但是如果您编写一个接受Foo
的Bar
构造函数,您可以简化语法。然后你的循环可以变成:
for(foo f : foos) {
myBars.add(new Bar(f));
}
根据您的情况,另一种方法是根本不创建 Bar
列表。相反,您可以简单地添加一个 Foo.getAsBar()
方法,这样您就可以根据需要动态生成一个 Bar
对象。如果容器中元素的数量高于您需要访问它们的总次数,那么这可能更有效。
关于Java:将类的集合转换为B类的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6281174/