clojure - 在 Clojure 中复制 Java peek 流方法
问题描述
在Java中我可以做到这一点
list.stream().peek(System.out::println).filter(i -> i >= 0).findFirst();
这将在列表中找到第一个正数,打印从开始到第一个正数的所有数字。
我在 Clojure 中需要类似的东西,但我找不到 peek 的等价物。peek 在 Clojure 中做了一些不同的事情。我需要在不消耗序列的情况下创建副作用,中介。就像元素通过一样,它们应该被传递给函数。我可以自己实现它,但我不想重新发明现有的东西。似乎是基本功能,我找不到要调用的正确函数)。
解决方案
只需map
与 和 转换器结合使用doto
即可使其产生副作用,否则将成为直通:
(into []
(comp
(map #(doto % println))
(filter pos?)
(take 1))
[-1 -2 -3 4 5])
或者对于您在评论中所说的话,您可以使用do
例如:
(->>
(repeatedly #(rand-nth [1 nil nil]))
(into []
(comp
(map #(do (when (nil? %) (Thread/sleep 1000)) %))
(remove nil?)
(take 1)))
first)
我正在使用传感器,因为由于分块,不能保证惰性序列一次只有一个,如果你想避免这种情况,需要特别小心,所以在你想要混合的情况下它会更好更容易在数据转换管道内的副作用中,改为使用转换器。
推荐阅读
- javascript - 即使验证无效,也会发送 Jquery 表单
- imagemagick-convert - imagemagick convert 在通过二进制安装时抛出错误
- ios - 如何将 [String : Any]() (Swift Dictionary) 解析为 TCP/IP 服务器?
- firebase - 在谷歌云功能中找不到包“firebase.google.com/go”
- docker - 在 Alpine 容器中启用 crond
- alexa - 意见: avs-device-sdk 构建完整的 alexa
- c++ - 如何通过 pthread 发送套接字 id?
- node.js - 如何在不使用索引的情况下更新 dynamodb 中的映射对象列表?
- maven - 在 rpm-maven-plugin 中有条件地将文件从源位置复制到目标位置
- docker - RabbitMQ 客户端在运行 docker-compose up 命令时抛出错误