如何创建Boolean.FALSE
的流,比如长度为100?
我所挣扎的是:
Boolean.FALSE
数组。但是new Boolean[100]
会返回NULL
的数组。所以我合理地考虑使用流API作为方便的Iterable
和几乎(1)Iterable
操作工具; Boolean
无参数构造函数(2),因此我无法理解
使用Stream.generate()
,因为它接受Supplier<T>
(3)。我发现Stream.iterate(Boolean.FALSE, bool -> Boolean.FALSE).limit(100);
给出了我想要的东西,但它似乎并不是一个非常优雅的解决方案,恕我直言。
另一个选项,我发现(4)是IntStream.range(0, 100).mapToObj(idx -> Boolean.FALSE);
,在我看来更奇怪。
尽管这些选项并未违反流API的管道概念,是否有更简洁的方法来创建Boolean.FALSE
的流?
答案 0 :(得分:9)
即使Boolean
没有no-arg构造函数,您仍然可以使用lambda使用Stream.generate
:
Stream.generate(() -> Boolean.FALSE).limit(100)
这也有(与使用构造函数相比)那些相同的 Boolean
个实例,而不是100个不同但相等的实例。
答案 1 :(得分:7)
您可以使用Collections
&#39; s static <T> List<T> nCopies(int n, T o)
:
Collections.nCopies (100, Boolean.FALSE).stream()...
请注意List
返回的nCopies
为tiny (it contains a single reference to the data object).
,因此与Stream.generate().limit()
解决方案相比,它不需要更多存储空间,无论所需大小如何
答案 2 :(得分:1)
您当然可以直接创建流
Stream.Builder<Boolean> builder = Stream.builder();
for( int i = 0; i < 100; i++ )
builder.add( false );
Stream<Boolean> stream = builder.build();