换句话说,以下行是否保证打印行数?
int num = list.stream().peek(System.out::println).count();
这个问题是由https://stackoverflow.com/a/41346586/2513200
我模模糊糊地记得有一次讨论,认为避免迭代的优化可能是合法的,但在快速搜索过程中没有发现任何结论。
流的JavaDocs。count包含以下语句:
这是还原的特殊情况,相当于:返回mapToLong(e-
但是我不确定这是否提供了任何保证,如果流可以以某种方式以短路的方式确定结果。
不,不是。由于优化了count()
实现,它不会在Java9中执行此操作(如果流大小事先已知,它将跳过迭代)。
详见JDK-8067969。JDK-9中的文档已相应更新:
如果实现能够直接从流源计算计数,则可以选择不执行流管道(顺序或并行)。在这种情况下,将不会遍历任何源元素,也不会评估任何中间操作。除调试等无害情况外,强烈建议不要使用具有副作用的行为参数,否则可能会受到影响。
我需要生成加密安全、随机和唯一的字符串,每个字符串实际上都将用作访问令牌。为此,我计划使用Java的类。但是,我不确定SecureRandom是否保证唯一性。换句话说,SecureRandom在生成的每一次都会产生不同的值吗? 用值(即)创建实例似乎可以工作。但是,我不确定。此外,这个答案指出种子既不安全也不可移植。种子值符合我的目的吗? 如果你有其他建议,我也想听听。
问题内容: 考虑以下代码: 当第一个URL够用时会被要求输入第二个URL吗? 我尝试了一个较小的示例,它看起来像预期的那样工作。即一个一个地处理数据,但是可以依靠这种行为吗?如果没有,在帮助之前打电话吗? 输出: 更新 :如果对实施很重要,请使用官方Oracle JDK8 答案 :根据下面的评论和答案,flatmap部分是惰性的。即完全读取第一个流,并且仅在需要时才读取下一个。渴望读取一个流,但是
问题内容: 我真的是在这里指身份平等。 例如,以下内容将始终打印 true 吗? 问题答案: 是的,类令牌是唯一的(对于任何给定的类加载器而言)。 即,您将始终 在相同的类加载器领域中 获得对相同物理对象的引用。但是,不同的类加载器将加载不同的类令牌,同时,当两个不同的类加载器加载相同的类定义时,会将相同的类定义视为不同。
根据 [执行子 #1] 表达式E1[E2](根据定义)与*((E1)(E2))相同,但对于数组操作数,如果该操作数是左值,则结果是左值;否则结果是xvalue。 其中 由 [expr.add#4.2] 确定 将具有整数类型的表达式 J 添加到指针类型的表达式 P 中或从中减去该表达式 J 时,结果的类型为 P。 […] 否则,如果P指向具有n个元素的数组对象x的数组元素i([dcl.array])
问题内容: 众所周知,JavaScript在所有现代浏览器实现中都是单线程的,但是它是在任何标准中指定的,还是仅根据传统?假设JavaScript始终是单线程的,是否完全安全? 问题答案: 这是个好问题。我很想说“是”。我不能 通常认为JavaScript具有脚本(*)可见的单个执行线程,因此,当您输入内联脚本,事件侦听器或超时时,您将完全处于控制状态,直到从块或函数的结尾返回为止。 (*:忽略浏
问题内容: 如果我运行查询,例如: 即使查询与任何记录都不匹配,它也会始终返回结果吗?还是我需要验证并确保结果返回一行? 问题答案: 是的,因为它是一个聚合并且返回零。除非您添加GROUP BY,否则由于没有组,因此没有结果… 除非您添加GROUP BY,然后没有任何行,否则MAX / SUM等将返回NULL。只有COUNT传回没有结果的数字 编辑,有点晚:SUM会像MAX一样返回NULL 编辑,