Я очень новичок в Clojure.Я хочу передать List<HashMap<String,String>>
в функцию Clojure, в которой я хочу использовать внутренние HashMaps в качестве обычных карт Clojure, но я не могу получить значения из карты с помощью функции: key (которая отлично работает для обычной карты Clojure). Iиспользуйте функцию into {}, но она не делает то, что я, кроме нее, должен сделать.Что я делаю не так?(Примечание: это код теста демострации, просто чтобы увидеть поведение)
Java-код:
package com.experimental.clojure.java;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.experimental.clojure.test.ConvertTest;
public class Test_Cloj_Convert {
public static void main(String[] args) {
List<Map<String, String>> columns = new ArrayList<Map<String, String>>();
Map<String, String> col1 = new HashMap<String, String>();
col1.put("name", "ID");
col1.put("type", "int");
col1.put("pos", "0");
Map<String, String> col2 = new HashMap<String, String>();
col2.put("name", "Name");
col2.put("type", "string");
col2.put("pos", "2");
Map<String, String> col3 = new HashMap<String, String>();
col3.put("name", "Description");
col3.put("type", "enum");
col3.put("pos", "1");
columns.add(col1);
columns.add(col2);
columns.add(col3);
ConvertTest scripter = new ConvertTest();
System.out.println(scripter.conv(columns));
}
}
Код Clojure
(ns com.experimental.clojure.test.ConvertTest
(:gen-class
:name com.experimental.clojure.test.ConvertTest
:methods [
[conv [java.util.List] String]
])
(:import [java.util List] [java.util HashMap])
)
(defn conv
[columns]
(println columns)
(println (first columns))
(println (:type (first columns)))
(println (into {} (first columns)))
(println (:type (into {} (first columns))))
)
(defn -conv
[this columns]
(conv columns)
)
И (удивительный) вывод
#<ArrayList [{name=ID, type=int, pos=0}, {name=Name, type=string, pos=2}, {name=Description, type=enum, pos=1}]>
#<HashMap {name=ID, type=int, pos=0}>
nil
{name ID, type int, pos 0}
nil
null
То, что я исключил для третьего println, возвращает строку "int".И в четвертой печати очевидно, что HashMap неправильно конвертируется в карту Clojure.Можете ли вы помочь, что сделать для успешного преобразования?(Я знаю, что мог бы использовать функцию get () HashMap, но было бы удобнее использовать ее в качестве карты Clojure)