Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中迭代向量并仅存储指定的类?_Java_Iterator - Fatal编程技术网

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

如何在Java中迭代向量并仅存储指定的类?,java,iterator,Java,Iterator,我有一个用例,我需要迭代向量元素,并且仅当该实例属于类方法 有什么容易做到的吗 目前我正在这样做: Iterator itr = vec.iterator(); Iterator element = vec.iterator(); while(itr.hasNext()) { boolean method = itr.next() instanceof Method; if(method) System.o

我有一个用例,我需要迭代
向量
元素,并且仅当该实例属于类
方法

有什么容易做到的吗

目前我正在这样做:

    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();
    }

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

假设您有一个类
方法,那么代码可以是这样的:

    List<Method> list = new ArrayList<Method>();
    for (Object obj : vector) {
        if (obj instanceof Method) {
            list.add(obj);
        }
    }
List List=new ArrayList();
对于(对象对象对象:向量){
if(obj instanceof方法){
列表。添加(obj);
}
}

没有人关心在没有同步的情况下迭代向量吗


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

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

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

List<String> list = vec.stream().collect(Collectors.toList());
Vector vec=new Vector();
添加向量(“你好”);
向量加上(“世界”);
List List=vec.stream().collect(Collectors.toList());

您的布尔值
方法
和名为
方法
的类非常容易混淆。类名应始终以大写字母开头。
方法
有冲突吗这种方法有什么问题?如果不使用像Guava这样的外部库,您将找不到任何其他方法。(注意:应该删除else部分)对于拼写错误导致的
方法
冲突表示抱歉。这不是对问题的回答,而是可以(可能应该)添加到任何答案中的备注。