下面的说法是真的吗?
该
sorted()
操作是“有状态的中间操作”,这意味着后续操作不再对后台集合进行操作,而是对内部状态进行操作。
我已经Stream::sorted作为上述来源的片段进行了测试:
final List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());
list.stream()
.filter(i -> i > 5)
.sorted()
.forEach(list::remove);
System.out.println(list); // Prints [0, 1, 2, 3, 4, 5]
有用。我替换Stream::sorted为Stream::distinct,Stream::limit和Stream::skip:
final List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());
list.stream()
.filter(i -> i > 5)
.distinct()
.forEach(list::remove); // Throws NullPointerException
令我惊讶的NullPointerException是,被抛出。
所有经过测试的方法都遵循有状态的中间操作特性。然而,这种独特的行为Stream::sorted没有记录,流操作和管道部分也没有解释有状态的中间操作是否真的保证了新的源集合。
我的困惑来自哪里,对上述行为的解释是什么?
SMILET
www说
ibeautiful
相关分类