I am passing a map generated in Clojure into Java ultimately destined for a JTable. The use of the map function creates a lazy sequence that even with doall, into {} is not realized. Clojure:
(defn test-lz-seq []
(let [myvec [[1 2 nil][3 4 nil][ 5 6 nil][ 7 8 nil]]
myvec2 (doall (map #(if (nil? (nth % 2)) (assoc % 2 "NA")) myvec))
colnames ["VarA" "VarB" "VarC"] ]
(into {} (java.util.HashMap.
{":colnames" colnames
":data" myvec2} ))))
(println (test-lz-seq))
At the repl looks good:
lnrocks.core> {:data ([1 2 NA] [3 4 NA] [5 6 NA] [7 8 NA]), :colnames [VarA VarB VarC]}
Java code:
import clojure.java.api.Clojure;
import clojure.lang.IFn;
import clojure.lang.PersistentVector;
.
.
.
public class DialogMainFrame extends JFrame {
private PersistentVector colnames;
private PersistentVector data;
private IFn require = Clojure.var("clojure.core", "require");
.
.
.
System.out.println("==========test code===========");
System.out.println("");
IFn testLzSeq = Clojure.var("lnrocks.core", "test-lz-seq");
Map<String, PersistentVector> hm = (Map)testLzSeq.invoke();
System.out.println(hm.get(":data"));
System.out.println(hm.get(":colnames"));
System.out.println("");
System.out.println("===================================");
At the console:
==========test code===========
clojure.lang.LazySeq@e1781
["VarA" "VarB" "VarC"]
===================================
How do I realize the vector in Java?