如何在Clojure中过滤Java HashMap



我正在尝试过滤出值小于零的映射条目:

(filter #(< 0 (.getValue %)) map)

其中map是一个Java映射(HashMap的实例)。我得到

actual: java.lang.NullPointerException: null
 at clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:26)

我做错了什么?

您确定mapHashMap的一个实例吗?因为这实际上是有效的:

=> (import [java.util HashMap])
java.util.HashMap
=> (def m (HashMap.))
#'.../m
=> (filter #(< 0 (.getValue %)) m)
()
=> (.put m 3 4)
nil
=> (.put m 5 -32)
nil
=> (filter #(< 0 (.getValue %)) m)
(#<Entry 3=4>)

所以我想错误是在别的地方。也许你可以给我们看看创建map的代码?哦,顺便说一句,你正在过滤大于零的值,而不是小于零的值。

另一件可能导致此错误的事情是,你的地图中的值与<并不真正可比,所以你也应该检查一下。

最新更新