生成布尔流

时间:2017-10-16 09:45:59

标签: java java-8 java-stream

如何创建Boolean.FALSE的流,比如长度为100?

我所挣扎的是:

  1. 最初我打算创建一个Boolean.FALSE数组。但是new Boolean[100]会返回NULL的数组。所以我合理地考虑使用流API作为方便的Iterable和几乎(1Iterable操作工具;
  2. 没有Boolean无参数构造函数(2),因此我无法理解 使用Stream.generate(),因为它接受Supplier<T>3)。
  3. 我发现Stream.iterate(Boolean.FALSE, bool -> Boolean.FALSE).limit(100);给出了我想要的东西,但它似乎并不是一个非常优雅的解决方案,恕我直言。

    另一个选项,我发现(4)是IntStream.range(0, 100).mapToObj(idx -> Boolean.FALSE);,在我看来更奇怪。

    尽管这些选项并未违反流API的管道概念,是否有更简洁的方法来创建Boolean.FALSE的流?

3 个答案:

答案 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返回的nCopiestiny (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();