我想在LDAP服务器中查找数据。当我使用以下代码时,它希望我具有NamingEnumeration(而不是List,HashMap),并且它迫使我使用SearchResult类型。

NamingEnumeration<SearchResult> values =
dirContext.search("cn=Loggers,cn=config", "(objectClass=*)", searchCtls);


当我尝试使用它时,由于它是NamingEnumeration类型,所以我不知道如何将其更改为String。有没有一种方法可以将其转换为String?我想使用split(),但它不是String,因此似乎不起作用。

for (NamingEnumeration<SearchResult> ne : searchResult) {
                String a = searchResult.split("");   // I want to split.
                if(a.length-1].equals("Logger")){
                String logType = a[a.lenth-2];
                try {
                     // and then , I will do something with logType


如您所知,我的Java基础确实很弱。我将对如何将NamingEnumeration类型更改为String提供任何建议?如果有很多方法,我想知道。

最佳答案

迭代NamingEnumeration的通常方法是使用hasMore()next()

NamingEnumeration<SearchResult> results =
        dirContext.search("cn=Loggers,cn=config", "(objectClass=*)", searchCtls);

while (results.hasMore()) {
    SearchResult result = results.next();
    Attributes attributes = result.getAttributes();
    Attribute cn = attributes.get("cn");
    //get/iterate the values of the attribute
}


无法使用“增强的for语句(有时称为” for-each循环”语句),因为它们实现了Enumeration而不是Iterable接口。其原因主要是历史原因,NamingEnumeration自Java 1.3开始存在,Iterable自Java 1.5开始存在。

10-07 13:27