给定Foo的列表,我需要将它们映射到一个不同类的集合,比如myFoos。我现在这样做:
List<Bar> myBars = new...
for(Foo f : foos) {
Bar b = new Bar();
b.setAProperty(f.getProperty);
b.setAnotherProp(f.getAnotherProp);
myBars.add(b);
}那么,有没有更简单的方法呢?诚然,这很容易,但我想知道是否有什么魔法可以将foos变成条形图,而不必手动遍历列表,特别是因为我的输入列表可能很大。
如果没有,你们知道编译器是否对此进行了优化吗?我主要担心的是性能。
谢谢!
--
Llappall
发布于 2011-06-08 23:19:48
你不能真的避免遍历列表,因为你必须转换每一项!
但是,如果您编写一个接受Foo的Bar构造函数,则可以简化语法。然后你的循环就会变成:
for(foo f : foos) {
myBars.add(new Bar(f));
}根据您的方案,另一种方法是根本不创建Bar列表。相反,您可以简单地添加一个Foo.getAsBar()方法,以便根据需要动态生成Bar对象。如果容器中的元素数量高于您需要访问它们的总次数,那么这可能会更有效率。
发布于 2011-06-08 23:23:04
public Bar(Foo f){
this.a = f.a;
this.b = f.b;
}
for (Foo f : myFoos){
myBars.add(new Bar(f));
}发布于 2011-06-09 16:24:18
一个想法不是一般的解决方案,但在某些情况下可能是合适的:
拉取属性
无需在实例化Bar时将属性从Foo推送到Bar,只需将Foo关联到新的Bar并映射属性getter中的属性即可。
public class Bar { Foo foo; public Bar(Foo foo) { this.foo = foo; } public int getPropertyA() { return foo.getPropertyA(); } public int getAnotherProperty() { return foo.getAnotherProperty(); } }
这并不能阻止您在Foos上循环以实例化Bars。但是它延迟了映射属性的工作。
https://stackoverflow.com/questions/6281174
复制相似问题