- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我想在 clojure 中打印 hbase 表扫描的输出。
(defmulti scan (fn [table & args] (map class args)))
(defmethod scan [java.lang.String java.lang.String] [table start-key end-key]
(let [scan (Scan. (Bytes/toBytes start-key) (Bytes/toBytes end-key))]
(let [scanner (.getScanner table scan)]
(doseq [result scanner]
(prn
(Bytes/toString (.getRow result))
(get-to-map result))))))
其中 get-to-map 将结果转换为 map 。它可以像这样运行:
(hbase.table/scan table "key000001" "key999999")
但是如果我想让用户对扫描结果执行某些操作该怎么办?我可以允许他们传递一个函数作为回调来应用于每个结果。但我的问题是:如果我希望用户能够惰性地迭代每个结果,我应该返回什么
(Bytes/toString (.getRow result))
(get-to-map result)
和不保留以前的结果,就像在使用惰性序列的简单实现中可能发生的情况一样。
最佳答案
如果您接受回调参数,则可以在 doseq
内调用它:
(defmulti scan [f table & args] (mapv class args)) ; mapv returns vector
(defmethod scan [String String] [f table start-key end-key]
; ^- java.lang classes are imported implicitly
(let [scan ...
scanner ...] ; no need for two separate lets
(doseq [result scanner]
; call f here, e.g.
(f result))))
这里 f
每个结果都会被调用一次。它的返回值以及结果本身将立即被丢弃。您当然可以使用 result
的某些预处理版本来调用 f
,例如(f (foo 结果) (bar 结果))
.
您还可以将结果序列/vector 返回给客户端,并让它进行自己的处理。如果序列是惰性的,您需要确保支持它的任何资源在处理期间保持打开状态(并且可能稍后将它们关闭 - 请参阅 with-open
;处理代码需要在 with-open
内部执行,并在返回时完成处理)。
例如,要将预处理结果的 vector 返回给客户端,您可以这样做
(defmethod scan ...
(let [...]
(mapv (fn preprocess-result [result]
(result->map result))
scanner)))
然后客户端就可以对它们做任何想做的事情。使用 map
返回惰性序列。如果客户端需要打开/关闭资源,您可以接受它作为扫描参数,以便客户端可以说
(with-open [r (some-resource)]
; or mapv, dorun+map, doall+for, ...
(doseq [result (scan r ...)]
(do-stuff-with result)))
关于java - Clojure 和 HBase : Iterate Lazily over a Scan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328566/
isqrt :: Integer -> Integer isqrt = floor . sqrt . fromIntegral primes :: [Integer] primes = sieve [
有没有F :: * -> * , iterate' :: Ord a => (a -> a) -> a -> F a和 elem' :: Ord a => Int -> a -> F a -> Boo
我有一个 TabBar Controller ,最多有 9 个 Controller ,每个 Controller 都有一个导航 Controller 。目前,我在 的应用程序委托(delegate)
我正在制作一个内容无限的 UIScrollView,例如其中包含事件的日历。我正在使用 REST 调用从后端获取事件。 我想知道是否有人有一个模式/代码块的限制: 何时获取更多数据和 还要获取多少 易
我有一个如下所示的拼图数据集(我使用的是Polar,但任何数据框库都可以):。我希望通过Match_id和测试训练拆分进行分组,这样80%的匹配项在训练集中,其余的在测试集中。所以大概是这样的:。我需
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: in.aaju
我有两个实体:用户和模块,它们使用多对多链接。 在我的用户实体中,我有一个模块列表成员: 我成功插入了一个新用户,但是当我想检索用户时,我得到了用户信息,但没有得到用户的模块。我收到此错误消息: .h
是否可以在 中实现实时滚动或延迟滚动?其中有 环形。我在 中有以下代码,我想延迟加载内容。
后端 Spring MVC 和 Spring-data,spring-security 。前端 Angularjs。我使用的是 spring 3.1;Jackson 1.8; JPa 2.1 ands
我有一对多的关系,这是我的代码 @Entity @Table(name = "catalog") public class Catalog { @Id @GeneratedValue(
我正在使用 Spring Boot 1.5.10、Spring Data JPA 和 Hibernate。 当我按 Id 搜索实体 Person 时,结果是正确的,但是当我尝试使用 List 构建查询
这个问题已被问过很多次,但我仍然找不到适合我的用例的解决方案: 我有一个使用 Hibernate 5.x 的 Struts2 应用程序。 该应用程序是“通讯录应用程序”。它有两个实体:“联系人”,可以
我有这个问题: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
假设我的 Java、Spring Boot、Hibernate 应用程序中有这个类: @Entity @Table(name="person") @Getter @Setter @NoArgsCons
我有延迟初始化的问题。我找不到解决方案。 异常(exception): [pool-1-thread-12] ERROR:12:20:14.840 o.h.LazyInitializationExce
假设我想在 clojure 中打印 hbase 表扫描的输出。 (defmulti scan (fn [table & args] (map class args))) (defmethod scan
我需要响应 JSON 作为输出。但它显示异常 org.codehaus.jackson.map.JsonMappingException: failed to lazily initialize a
我有一个数据融合查询。我不想等所有批次都待处理,而是想在第一个批次准备好后立即运行一些代码。 这是等待然后处理的代码: let dataframe = ExecutionContext::new().
我在哪里可以找到 Xcode6 中的“Load Symbols Lazily”选项? 我在“偏好”中找不到它 最佳答案 Load Symbols Lazily”选项在 Xcode 6 中不可用。 您可
我尝试使用 java - hibernate - spring 实现服务器 REST,它返回一个 json。 我映射了一个多对多的关系。 我解释得更好,我有一个供应商,上面有一个成分列表,每个成分都有
我是一名优秀的程序员,十分优秀!