我正在学习Java 8
lambda表达式,我想问一下以下与peek
我遇到的函数接口中的方法有关的Java代码。
在IDE上执行程序时,它不输出。我期望它会给2, 4, 6
。
import java.util.Arrays;
import java.util.List;
public class Test_Q3 {
public Test_Q3() {
}
public static void main(String[] args) {
List<Integer> values = Arrays.asList(1, 2, 3);
values.stream()
.map(n -> n * 2)
.peek(System.out::print)
.count();
}
}
我假设您正在Java 9下运行它?您没有更改SIZED
流的属性,因此不需要执行任何一个map
或peek
全部执行。
换句话说,您关心的只是count
最终结果,但与此同时,您不List
以 任何
方式(filter
例如通过或distinct
)更改的初始大小。这是在Streams中完成的优化。
顺便说一句,即使您添加了虚拟过滤器,它也会显示您期望的结果:
values.stream ()
.map(n -> n*2)
.peek(System.out::print)
.filter(x -> true)
.count();
在IDE上执行程序时,它不会给出任何输出。我原以为它会给出。
Edit:是我现在正在做的事情,但是由于只是返回,所以这似乎是对Map的误用。另外,它读起来并不像是商业逻辑。 最后编辑:我接受了@Holger的回答。不能期望处理流上的所有元素,因为它不是终端操作。也是如此。即使您可能已经终止了您的流,以保证它将处理所有操作,您也不应该编写期望每个用户都这样做的代码。因此,要进行处理,您应该在上使用,然后根据需要再次开始对进行流式处理。
在Oracle“原始数据类型”页面中,它提到Java8增加了对无符号int和long的支持: 那么,有没有办法声明一个无符号的int或long呢?
我有一个使用Java Version8的Spring和Maven的项目。当我运行maven update时,它适用于Java9或更高版本,当我编译它时,它适用于Java8。我注意到了这一点,因为用Maven更新会将一个特定的类更改为Java9,而我无法导入这个类。 这个类是:javax.annotation.generated(Java8)。 这是要导入的类。但是,当我进行maven更新时,文件的
本文向大家介绍Java9中私有方法的注解@SafeVarargs,包括了Java9中私有方法的注解@SafeVarargs的使用技巧和注意事项,需要的朋友参考一下 @SafeVarargs注解是在Java7中引入的。此注解适用于接受varargs参数的final和static方法或构造函数。此注解用于确保方法不会对其varargs参数执行不安全的操作。从Java9开始,@SafeVarargs注解
与之间的差异: > 它们可能有不同的特点: 这里讨论的似乎是另一个毫无意义的流拆分器特性策略(并行计算似乎更好):深入理解Java8和Java9中的拆分器特性 在本例中,从禁用拆分功能的顺序流创建了一个拆分器(返回null)。当以后需要转换回一个流时,该流不会从并行处理中受益。一种耻辱。 最大的问题是:作为解决办法,在调用之前总是将流转换为并行流会有什么主要影响?