小编Ale*_*lov的帖子

是否有可能隐藏lambda闭包的变量?

我正试图在Kotlin中创建一个类型安全的groovy式构建器,就像这里描述的那样.问题是嵌套lambda中lambda接收器的可见性.这是一个简单的例子.

html {
    head(id = "head1")
    body() {
        head(id = "head2")
    }
}
Run Code Online (Sandbox Code Playgroud)

嵌套lambda的接收者是没有'head'方法的Body.然而,这段代码编译并打印成:

<html>
    <head id="head1"></head>
    <head id="head2"></head>
    <body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是预期的但有没有办法在内部头部获得编译错误?

lambda type-safety builder-pattern kotlin

5
推荐指数
1
解决办法
145
查看次数

延迟流操作和stream()的未解析引用

我正在用kotlin开发一些日志分析工具.我有大量的传入日志,因此无法将它们全部加载到内存中,我需要以"管道"方式处理它们.我发现有两件事令我失望:

  1. 据我了解了科特林集合所有流等的方法(filter,map等)不懒惰.例如,我有1 GB的日志,并希望获得与给定正则表达式匹配的前十行的长度.如果按原样编写,过滤和转换将应用于内存中的整个千兆字节的字符串.
  2. 我不能写l.stream(),我定义为val l = ArrayList<String>().编译器说:"未解决的参考:流".

所以问题是:你是否会使收集功能变得懒惰?为什么我不能访问该stream()方法?

java kotlin java-stream

3
推荐指数
1
解决办法
330
查看次数