I think your most immediate issue is the "#" after result - that makes this 
into an anonymous function instance. Instead, you want to actually evaluate 
that expression in the let:

 (let [result (.getStatements c nil nil nil (into-array Resource '[]))]
      (log/debug (format "Result class: %s" (type result)))
      (map #(log/debug "Element: " %1) result))

However, as far as I can tell, you will not be able to use the 
CloseableIteration result as an input to map in the last line as 
CloseableIteration is not something Clojure understands - that library 
seems to have its own iterator hierarchy without any ties to the standard 
Java iterators (seems like a questionable design choice to me). Due to this 
you either need to create a wrapper to turn their iterator into a sequence, 
something like this:

(defn seq-iteration [^CloseableIteration iter]
  (lazy-seq
    (if (.hasNext iter)
      (cons (.next iter) (seq-iteration iter))
      (do (.close iter)
        nil))))

Here, I'm not handling iterator exceptions if they occur - they will just 
bubble out during use. There's probably more that would need to be done to 
ensure .close is called on the iter in the case of an exception during 
.next.

Or you need to traverse the iterator in a loop/recur:

(let [result ^CloseableIteration (.getStatements c nil nil nil (into-array 
Resource '[]))]
  (try
    (loop []
      (when (.hasNext result)
        (log/debug "Element: " (.next result))
        (recur)))
    (catch Exception e
      (log/debug "Exception: " (.getMessage e)))
    (finally
      (.close result)))

Because the CloseableIteration can throw exceptions, I wrapped the whole 
thing in a try/catch and a finally to .close the result. If you want to 
accumulate some state during this recursion, you can add a loop binding to 
collect info and return it at the end instead.



On Monday, January 25, 2016 at 9:38:28 AM UTC-6, Jacek Grzebyta wrote:
>
> Hi All,
>
> Sorry for trivial question but I am a newbe in Clojure. 
> I need to manage some object which is created by calling java method:
>
>
>  (let [result #(.getStatements c nil nil nil (into-array Resource '[]))]
>>       (log/debug (format "Result class: %s" (type result)))
>>       (map #(log/debug "Element: " %1) result)
>>       )
>>
>
> I know the result should be type of "CloseableIteration 
> <http://www.google.com/url?q=http%3A%2F%2Frdf4j.org%2Fdoc%2F4%2Fapidocs%2Finfo%2Faduna%2Fiteration%2FCloseableIteration.html&sa=D&sntz=1&usg=AFQjCNEKEPHoxbdwlQIaFE_1zCUlJ1e1Fw><?
>  
> extends Statement 
> <http://rdf4j.org/doc/4/apidocs/org/openrdf/model/Statement.html>,
> SailException 
> <http://rdf4j.org/doc/4/apidocs/org/openrdf/sail/SailException.html>>" 
> but Clojure shows me the error that class 
> "triple.loader_test$test_repository$result__849" cannot be processed. As a 
> Java programmer I would say that clojure wraps/makes internal proxy from/ 
> the origin object. 
> I have added all required class names into file head by namespace 
> declaration. 
>
> How can I "unpack" the pack? Maybe my approach is totally wrong? I am even 
> do not know what is the name of that issues so google is helpless in my 
> case. 
> Thanks a lot for help.
>
> Best regards,
> Jacek
>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to