我需要过滤地图,但过滤器应该将值与前一个值进行比较,过滤后的地图应该只包含与之前信号不同的值。
这是一个例子:
Map to filter: {:key1 100 :key2 10 :key3 -20 :key4 -10 :key5 10}
Return: {:key3 -20 :key5 10}
我怎么能这样做呢?
答案 0 :(得分:2)
我可能会使用partition-by根据序列何时更改值来对序列进行分块。我们可以告诉partition-by
查看" signum"的值,然后只取每个块中的第一个结果。
(->> {:key1 100 :key2 10 :key3 -20 :key4 -10 :key5 10}
(partition-by #(Integer/signum (val %)))
rest
(map first))
=> ([:key3 -20] [:key5 10])