Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从具有特定值的clojure向量中提取哈希映射列表_Java_Clojure - Fatal编程技术网

Java 从具有特定值的clojure向量中提取哈希映射列表

Java 从具有特定值的clojure向量中提取哈希映射列表,java,clojure,Java,Clojure,我有一个包含hashmaps的Clojure向量。这些哈希映射本身不与任何键相关联。 但是所有这些hashmap都有一个共同的键,比如说“ckey”。我想提取那些hashmaps的“ckey”值为“test” 数据实际上是一个已解析的json。大概是这样的:- testdata :{ sample1 : "samplevalue1" sample2 : "samplevalue2" sample3 : {innersample3 : "innersamplevalue3"} sample4 :

我有一个包含hashmaps的Clojure向量。这些哈希映射本身不与任何键相关联。 但是所有这些hashmap都有一个共同的键,比如说
“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代码,请检查。