2009-06-09 2 views
1

Просто интересно, есть ли способ клонировать NamingEnumeration в Java? Моя программа ищет сервер LDAP для людей, и для завершения может потребоваться несколько секунд. Чтобы получить количество результатов я использую следующее:Clone Java NamingEnumeration?

NamingEnumeration results = null; 
NamingEnumeration results2 = null; 

results = ctx.search("", "("+searchAt+"=" +searchVal +")", controls); 
results2 = result; 
int i = 0; 
while(results2.hasMore()) 
{ 
    results2.next(); 
    i++; 
} 

Но поскольку results2 просто ссылка на результат, когда я иду через отображение результатов results.hasMore() всегда возвращает ложь.

есть способ клонировать «результаты» без необходимости повторного предварительного поиска и присвоения его «результатам2»?

Спасибо, -Pete

ответ

2

Используйте Collections.list (результаты), чтобы поместить результаты в список, а затем используйте List.size, чтобы получить счетчик и выполнить итерацию по списку.

4

Там нет никакой гарантии, что если вы повторить поиск, вы получите тот же ответ обратно.

Простым решением является скорректировать результаты в List (ArrayList).

+0

спасибо, ребята! пятнадцать символов –

+0

Я думаю, что ответ Ишайи лучше. Продвиньте Ишай! –

3

В общем случае, если вам необходимо сделать копию Enumeration (или Iterator), вы перемещаете содержимое на List. Большинство перечислений не являются непосредственно клонируемыми. Вы можете создать список вручную или использовать метод Collections.list (который я пропустил на мгновение там).