Как перебирать вектор в Java и хранить только указанный класс?

У меня есть случай, когда мне нужно перебирать элементы 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();
    }

Но я думаю, что будет лучший способ, чем это.

Ответ 1

Предположим, что у вас есть класс Method, тогда код может выглядеть примерно так:

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

Ответ 2

Неужели никто не беспокоился об итерации вектора без синхронизации?

Если vector не ограничивается потоками, то при наличии другого потока, изменяющего его содержимое, каждая итерация для каждой итерации может бросать ConcurrentModificationException.

Ответ 3

В Java 8 вы можете вызвать метод .stream(), который возвращает поток векторных элементов, поэтому сохранение элементов, например в списке, может быть выполнено путем вызова коллектора

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

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

Ответ 4

приватный вектор clone_vecCustomerInvoiceDOs;

для (Customer_InvoiceDO customer_InvoiceDO: clone_vecCustomerInvoiceDOs)