生成布尔流

Evg*_*aev 4 java java-8 java-stream

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

我一直在努力的是:

  1. 本来我打算创建一个数组Boolean.FALSE.但是new Boolean[100]返回一个数组NULL.所以我合理地考虑使用流API作为方便Iterable且几乎(1)的Iterable操作工具;
  2. 没有Booleanno-params构造函数(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?

tob*_*s_k 9

即使Boolean没有no-arg构造函数,您仍然可以Stream.generate使用lambda:

Stream.generate(() -> Boolean.FALSE).limit(100)
Run Code Online (Sandbox Code Playgroud)

这也具有(与使用构造函数相比)那些将是相同 Boolean实例的优点,而不是100个不同但相等的实例.


Era*_*ran 7

你可以用Collections's static <T> List<T> nCopies(int n, T o):

Collections.nCopies (100, Boolean.FALSE).stream()...
Run Code Online (Sandbox Code Playgroud)

请注意,List返回的nCopies是tiny (it contains a single reference to the data object).,因此与Stream.generate().limit()解决方案相比,它不需要更多存储,无论所需大小如何.