首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:将classA集合转换为classB集合

Java:将classA集合转换为classB集合
EN

Stack Overflow用户
提问于 2011-06-08 23:17:01
回答 4查看 158关注 0票数 3

给定Foo的列表,我需要将它们映射到一个不同类的集合,比如myFoos。我现在这样做:

代码语言:javascript
复制
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

EN

回答 4

Stack Overflow用户

发布于 2011-06-08 23:19:48

你不能真的避免遍历列表,因为你必须转换每一项!

但是,如果您编写一个接受FooBar构造函数,则可以简化语法。然后你的循环就会变成:

代码语言:javascript
复制
for(foo f : foos) {
    myBars.add(new Bar(f));
}

根据您的方案,另一种方法是根本不创建Bar列表。相反,您可以简单地添加一个Foo.getAsBar()方法,以便根据需要动态生成Bar对象。如果容器中的元素数量高于您需要访问它们的总次数,那么这可能会更有效率。

票数 7
EN

Stack Overflow用户

发布于 2011-06-08 23:23:04

代码语言:javascript
复制
public Bar(Foo f){
  this.a = f.a;
  this.b = f.b;
}



for (Foo f : myFoos){
  myBars.add(new Bar(f));
}
票数 2
EN

Stack Overflow用户

发布于 2011-06-09 16:24:18

一个想法不是一般的解决方案,但在某些情况下可能是合适的:

拉取属性

无需在实例化Bar时将属性从Foo推送到Bar,只需将Foo关联到新的Bar并映射属性getter中的属性即可。

  • 这很好,如果不是所有的Bar实例/属性都可以被客户端访问。
  • 但如果客户端重复访问Bar实例/属性,则性能会受到影响。

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。但是它延迟了映射属性的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6281174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档