在
Java 11
中使用 Streams 时,我注意到以下情况。我尝试在非空列表上以两种不同的方式使用 Stream API。
第一种方式:
Collection<Object> categoryIds = List.of(1L, 2L, 3L, 4L);
List<String> nullable = Stream.ofNullable(categoryIds)
.map(Object::toString)
.collect(Collectors.toList());
第二种方式:
Collection<Object> categoryIds = List.of(1L, 2L, 3L, 4L);
List<String> nullable = categoryIds.stream()
.map(Object::toString)
.collect(Collectors.toList());
我尝试的两种方法导致了两种不同的结果。第一种方式的结果列表是包含单个元素的字符串。该字符串是:
"[1, 2, 3, 4]"
第二种方式给出了期望的和预期的结果。返回包含 4 个元素的结果列表:"1", "2", "3", "4"
。
这种行为是预期的吗?还是有问题?
Stream.ofNullable您正在创建一个具有单个元素的
Stream
对象
返回包含单个元素的顺序 Stream,如果非 null,则返回空 Stream。
Collection.stream - 它按顺序创建带有集合元素的流对象
返回以此集合作为源的顺序 Stream。
并且
Collection.stream
相当于stream.of(T...values)方法