Java 从具有特定值的clojure向量中提取哈希映射列表
我有一个包含hashmaps的Clojure向量。这些哈希映射本身不与任何键相关联。 但是所有这些hashmap都有一个共同的键,比如说Java 从具有特定值的clojure向量中提取哈希映射列表,java,clojure,Java,Clojure,我有一个包含hashmaps的Clojure向量。这些哈希映射本身不与任何键相关联。 但是所有这些hashmap都有一个共同的键,比如说“ckey”。我想提取那些hashmaps的“ckey”值为“test” 数据实际上是一个已解析的json。大概是这样的:- testdata :{ sample1 : "samplevalue1" sample2 : "samplevalue2" sample3 : {innersample3 : "innersamplevalue3"} sample4 :
“ckey”
。我想提取那些hashmaps的“ckey”
值为“test”
数据实际上是一个已解析的json。大概是这样的:-
testdata :{
sample1 : "samplevalue1"
sample2 : "samplevalue2"
sample3 : {innersample3 : "innersamplevalue3"}
sample4 : "samplevalue4"
sample5 : [{moresample []
link {innersample5 : "innersamplevalue5"}
ckeydata [{ckey:"test" something: somethingValue something2: somethingValue2}]}
{moresample []
link {innersample5 : "innersamplevalue5"}
ckeydata [{ckey:"test1"something: somethingValue something2: somethingValue2}]}
{moresample []
link {innersample5 : "innersamplevalue5"}
ckeydata [ {ckey:"test2" something: somethingValue something2: somethingValue2}]}
{moresample []
link {innersample5 : "innersamplevalue5"}
ckeydata [ {ckey:"test" something: somethingValue something2: somethingValue2}]}]}
因此,在本例中,我想从sample5
中提取hashmap,其“ckeydata”
键有一个向量,其中包含一个hashmap,其“ckey”
值为“test”
Clojure格式的数据:
testdata {
:sample1 "samplevalue1"
:sample2 "samplevalue2"
:sample3 {:innersample3 "innersamplevalue3"}
:sample4 "samplevalue4"
:sample5 [{:moresample []
:link {innersample5 "innersamplevalue5"}
:ckeydata [{:ckey:"test" :something: somethingValue something2 somethingValue2}]}
{:moresample []
:link {innersample5 "innersamplevalue5"}
:ckeydata [{:ckey "test1" :something "somethingValue" :something2 "somethingValue2"}]}
{:moresample []
:link {:innersample5 "innersamplevalue5"}
:ckeydata [ {:ckey "test2" :something "somethingValue" :something2 "somethingValue2"}]}
{:moresample []
:link {innersample5 : "innersamplevalue5"}
:ckeydata [ {:ckey "test" :something "somethingValue" :something2 "somethingValue2"}]}]}
注意:我不想使用太多的过滤器并在代码中循环。这应该可以:
(filter
(fn [{:keys [ckeydata]}]
(some (comp #{"test"} :ckey) ckeydata))
(:sample5 testdata))
这是一个相当密集的版本:
(filter
(fn [sample-map]
(some
(fn [element]
(= (:ckey element) "test"))
(:ckeydata sample-map)))
(:sample5 testdata))
如果
:ckeydata
始终只包含一个元素,请考虑:
(filter
(comp #{"test"} :ckey first :ckeydata)
(:sample5 testdata))
这应该起作用:
(filter
(fn [{:keys [ckeydata]}]
(some (comp #{"test"} :ckey) ckeydata))
(:sample5 testdata))
这是一个相当密集的版本:
(filter
(fn [sample-map]
(some
(fn [element]
(= (:ckey element) "test"))
(:ckeydata sample-map)))
(:sample5 testdata))
如果
:ckeydata
始终只包含一个元素,请考虑:
(filter
(comp #{"test"} :ckey first :ckeydata)
(:sample5 testdata))
这应该起作用:
(filter
(fn [{:keys [ckeydata]}]
(some (comp #{"test"} :ckey) ckeydata))
(:sample5 testdata))
这是一个相当密集的版本:
(filter
(fn [sample-map]
(some
(fn [element]
(= (:ckey element) "test"))
(:ckeydata sample-map)))
(:sample5 testdata))
如果
:ckeydata
始终只包含一个元素,请考虑:
(filter
(comp #{"test"} :ckey first :ckeydata)
(:sample5 testdata))
这应该起作用:
(filter
(fn [{:keys [ckeydata]}]
(some (comp #{"test"} :ckey) ckeydata))
(:sample5 testdata))
这是一个相当密集的版本:
(filter
(fn [sample-map]
(some
(fn [element]
(= (:ckey element) "test"))
(:ckeydata sample-map)))
(:sample5 testdata))
如果
:ckeydata
始终只包含一个元素,请考虑:
(filter
(comp #{"test"} :ckey first :ckeydata)
(:sample5 testdata))
这可以通过filter轻松完成,但请提供您从json创建的实际Clojure数据结构(例如,我不知道您是否将键转换为关键字或字符串)。提供的Clojure代码请检查。这可以通过filter轻松完成,但请提供您从json创建的实际Clojure数据结构(例如,我不知道您是否将键转换为关键字或字符串)。提供的Clojure代码请检查。这可以通过过滤器轻松完成,但请提供您从json创建的实际Clojure数据结构(例如,我不知道您是否正在将键转换为关键字或字符串)。提供的clojure代码请检查。这可以通过过滤器轻松完成,但请提供您从json创建的实际clojure数据结构(例如,我不知道您是否正在将键转换为关键字或字符串).提供了clojure代码,请检查。