小编Ili*_*kis的帖子

为什么这个java Stream会运行两次?

Java的API 8说:

在执行管道的终端操作之前,不会开始遍历管道源.

那么为什么以下代码抛出:

java.lang.IllegalStateException:stream已经被操作或关闭

Stream<Integer> stream = Stream.of(1,2,3);
stream.filter( x-> x>1 );
stream.filter( x-> x>2 ).forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)

根据API的第一个过滤操作不应该在Stream上操作.

java java-8 java-stream

22
推荐指数
1
解决办法
2072
查看次数

为什么上下文在这个Java 8流示例中是静态的?

在Java 8中使用以下简单方法:

public void test(){

    Stream<Integer> stream = Stream.of(1,2,3);
    stream.map(Integer::toString);
}
Run Code Online (Sandbox Code Playgroud)

我得到两个错误:

java:不兼容类型:无法推断类型变量R(参数不匹配;无效方法引用

对toString的引用在java.lang.Integer中的方法toString(int)和java.lang.Integer中的方法toString()都是不明确的

并且:

无效方法引用非静态方法toString()不能从静态上下文引用

第一个错误是可以理解的,Integer类有两个方法:

public static String toString(int i)
public String toString()
Run Code Online (Sandbox Code Playgroud)

并且编译器无法推断出所需的方法引用.

但是关于第二个问题,编译器引用的静态上下文在哪里?

该错误与Integer类的方法toString()有关,它不是静态的,但为什么我使用map()调用该方法的上下文是静态的?

还有一个问题,如果编译器必须解决导致编译时错误的两种方法之间的歧义,那么他不应该选择另一种吗?

java java-8 java-stream

11
推荐指数
1
解决办法
2062
查看次数

java.time.temporal.ChronoUnit VS java.time.temporal.ChronoField

在查看java 8 Time API时,我看到许多方法期望作为参数ChronoUnit(TemporalUnit的实现)在这里,而其他人期望ChronoField(TemporalField的实现)在这里.

当一个方法期望使用ChronoUnit和ChronoField以及它们的区别时,是否有人可以帮助我澄清设计者的决定?

谢谢.

java-8 java-time

7
推荐指数
2
解决办法
2374
查看次数

Stream.toArray()是一个线程安全的可变减少?

Java 8 Stream API中的collect操作被定义为可以安全地并行执行的可变缩减,即使结果Collection不是线程安全的.

我们可以对Stream.toArray()方法说同样的话吗?

这个方法是一个可变的减少,即使Stream是并行流并且结果数组不是线程安全的,也是线程安全的吗?

java multithreading java-8 java-stream

2
推荐指数
1
解决办法
168
查看次数

标签 统计

java-8 ×4

java ×3

java-stream ×3

java-time ×1

multithreading ×1