将Vector元素从一个类更改为另一个类

时间:2014-10-30 13:55:27

标签: java vector

我有ClassAClassB这样实现:

Class ClassB {
   //[...]
}

Class ClassA {
   //[...]

   public ClassB toClassB() {
       //[...]

       return new ClassB("Some data");
   }
}

另外,我有一个向量,其元素是ClassA个对象:

Vector vector;

vector.add(new ClassA("AAA"));
vector.add(new ClassA("BBB"));
vector.add(new ClassA("CCC"));

此代码将矢量元素从ClassA更改为ClassB

for (int i = 0; i < vector.size(); i++) {
    vector.set(i, ((ClassA) vector.get(i)).toClassB());
}   

有没有更简单/有效的方法来做同样的事情?

编辑:我将矢量类型从Vector<ClassA>更改为仅Vector,就像它在原始代码中一样。

2 个答案:

答案 0 :(得分:1)

public static Vector<ClassB> convert(Vector<ClassA> v){

    Vector<ClassB> result = new Vector(v.size());

    for(ClassA a : vector){
        result.add(a.toClassB());
    }
    //optional: v.clear()
    return result;
}

这个静态方法可以在任何类中(由于内聚力,它可能应该在ClassA中)。从oop的角度来看,阶级关系似乎很奇怪。如果ClassAClassB之间没有任何有意义的差异,您应该调查,如果您需要这两个类,或者是否有一个有用的抽象(关于关注点的分离)。

答案 1 :(得分:1)

如果您使用的是Java 8,则可以执行以下操作:

    final List<ClassA> listA = new ArrayList<>();
    final List<ClassB> listB = listA.stream().map(x -> x.toClassB()).collect(Collectors.toList());