Как перебирать вектор в 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)