在使用Streams聚合时,Brian Goetz比较使用Stream.collect()填充集合并使用Stream.forEach()执行相同操作,使用以下两个片段:
Set<String> uniqueStrings = strings.stream()
.collect(HashSet::new,
HashSet::add,
HashSet::addAll);
Run Code Online (Sandbox Code Playgroud)
和,
Set<String> set = new HashSet<>();
strings.stream().forEach(s -> set.add(s));
Run Code Online (Sandbox Code Playgroud)
然后他解释说:
关键的区别在于,使用forEach()版本,多个线程同时尝试访问单个结果容器,而使用并行collect(),每个线程都有自己的本地结果容器,其结果随后合并.
据我所知,只有当流是并行的时,多个线程才会在forEach()情况下工作.但是,在给出的示例中,forEach()在顺序流上运行(不调用parallelStream()).
那么,forEach()是否始终并行工作,或者代码片段应该调用parallelStream()而不是stream().(或者我错过了什么?)
我没有找到一种方法来快速执行此操作,而不必完全禁用“扩展名”面板中的扩展名。在IntelliJ IDEA中,可以使用可配置的键盘快捷键轻松地打开/关闭仿真。我想在VSCode中也应该有可能。
在以前版本的 Thunderbird 中,当连接到带有自签名证书的服务器时,会显示警告,但提供了使用此对话框为该服务器创建安全例外的选项:
我可以点击“确认安全例外”,此后,TB 可以与服务器通信。
但是在这个版本的TB中,我只看到一条消息:
Sending of message failed.
The certificate is not trusted because it is self-signed.
The configuration related to [server name] must be corrected.
Run Code Online (Sandbox Code Playgroud)
没有迹象表明什么“必须更正”才能让 TB 信任证书。
隐私设置部分中的证书管理器会打开上面的对话框。但是一旦输入了正确的 IP:port,“Get Certificate”按钮除了显示“No Information Available”之外什么也不做。这使得对话框非常无用。
由于邮件服务器位于 Intranet 上,因此我不担心由于缺少 CA 签名而导致的中间人攻击。
有没有其他方法可以让 TB 78 使用自签名证书?
使用直接元素构造函数设置默认命名空间非常简单.例如:
<map xmlns="http://www.w3.org/2013/XSL/json"/>
Run Code Online (Sandbox Code Playgroud)
如上所述,上述直接构造函数输出完全相同的元素.但是,如果我尝试对计算元素和命名空间构造函数执行相同操作,那么我运气不好:
element {"map"} {
namespace {""} { "http://www.w3.org/2013/XSL/json" }
}
Run Code Online (Sandbox Code Playgroud)
以上内容Duplicate namespace declaration: ''在BaseX 8.2中引发错误; 和XTDE0440: Cannot output a namespace node for the default namespace when the element is in no namespaceSaxon-HE 9.6中的一个.
如果我传递前缀,没有问题.以下效果很好:
element {"map"} {
namespace { "e" } {"http://www.w3.org/2013/XSL/json"}
}
Run Code Online (Sandbox Code Playgroud)
在上述情况下,BaseX和Saxon都没有抱怨.但我想将命名空间设置为默认命名空间.
关于计算机命名空间构造函数,XQuery 3.0规范说:
如果构造函数指定了PrefixExpr,则前缀表达式的计算方法如下:
湾 如果结果是空序列或零长度xs:string或xs:untypedAtomic值,则新命名空间节点没有名称(此类命名空间节点表示默认命名空间的绑定).
该规范还提供了"具有空前缀的计算命名空间构造函数"的类似示例:
namespace { "" } {"http://a.example.com" }
Run Code Online (Sandbox Code Playgroud)
为什么然后,错误消息?显然,计算的命名空间构造函数尝试重新声明已由计算元素构造函数声明的命名空间.另一方面,直接构造函数将直接初始化元素的命名空间到我的选择.但这只是我的猜测.我唯一确定的是我的困惑.
在任何情况下,有没有办法用计算构造函数获得与直接构造函数相同的结果?
为了在 JDK 15 中使用记录,我曾经使用--enable-preview --release 15在 Ant 构建上传递给 javac 的参数进行编译。一切都编译并运行良好。
使用 JDK 16 时,如果我使用相同的参数进行编译,我会得到
错误:带 --enable-preview 的源版本 15 无效(仅版本 16 支持预览语言功能)
记录是 JDK 16 的标准功能,因此我预计应该在没有这些参数的情况下进行编译。但是,如果我删除它们,我会得到
Foo.class 使用 Java SE 15 的预览功能。(使用 --enable-preview 允许加载包含预览功能的类文件)
Ant 报告编译失败:
编译失败;有关详细信息,请参阅编译器错误输出。在 org.apache.tools.ant.taskdefs.Javac.compile (Javac.java:1425)
因此,无论有没有标志,编译都会失败。怎么了?
java ×2
ant ×1
basex ×1
certificate ×1
java-16 ×1
java-stream ×1
javac ×1
saxon ×1
ssl ×1
thunderbird ×1
vim ×1
vscodevim ×1
xquery ×1