println集合中的每个元素并返回TRUE

时间:2013-01-08 14:45:45

标签: clojure

我这样做:

(coll? (map #(println (.toString %)) java-objects))

该函数必须返回TRUE,这就是这个coll?谓词的原因。我认为有一种更好,更优雅的方式?

PS。而且这个功能不起作用,因为它是“懒惰的”。您能否推荐一种正确的方法来浏览集合中的所有元素,并对每个元素执行一些操作。

2 个答案:

答案 0 :(得分:2)

http://clojuredocs.org/clojure_core/clojure.core/doall

(doall (map #(println (.toString %)) java-objects))

它会让你回来

(nil nil nil ...)

如果您需要,请

(do
    (doall (map #(println (.toString %)) java-objects))
    true)

答案 1 :(得分:1)

如果您不需要表达式的值而只需要副作用,那么最好使用doseq而不是map

(do (doseq [o java-objects]
      (println (.toString o)))
    true)

doseq doc:

clojure.core/doseq
([seq-exprs & body])
Macro
  Repeatedly executes body (presumably for side-effects) with
  bindings and filtering as provided by "for".  Does not retain
  the head of the sequence. Returns nil.