如何在Java中迭代向量并仅存储指定的类?

时间:2012-12-08 14:34:45

标签: java iterator

我有一个用例,我需要遍历Vector元素并将结果存储在say数组中,只要该实例属于类method

有什么容易做到的吗?

目前我这样做:

    Iterator itr = vec.iterator();
    Iterator element = vec.iterator();

    while(itr.hasNext())
    {
        boolean method = itr.next() instanceof Method;
        if(method)
            System.out.println( "\t" + ( (Method)(element.next()) ).name);
        else
            element.next();
    }

但我认为会有比这更好的方法。

3 个答案:

答案 0 :(得分:19)

假设你有一个班级Method,那么代码可能是这样的:

    List<Method> list = new ArrayList<Method>();
    for (Object obj : vector) {
        if (obj instanceof Method) {
            list.add(obj);
        }
    }

答案 1 :(得分:5)

没有人担心在没有同步的情况下迭代Vector吗?

如果vector不是线程限制的,则在存在修改其内容的另一个线程时,for-each迭代可能会抛出ConcurrentModificationException

答案 2 :(得分:0)

在Java 8中,您可以调用返回向量元素流的.stream()方法,因此可以通过调用收集器来存储元素(例如,在列表中)

Vector<String> vec = new Vector<>();
vec.add("hello");
vec.add("world");

List<String> list = vec.stream().collect(Collectors.toList());