Evg*_*aev 4 java java-8 java-stream
你如何创建Boolean.FALSE长度为100的流?
我一直在努力的是:
Boolean.FALSE.但是new Boolean[100]返回一个数组NULL.所以我合理地考虑使用流API作为方便Iterable且几乎(1)的Iterable操作工具;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?
即使Boolean没有no-arg构造函数,您仍然可以Stream.generate使用lambda:
Stream.generate(() -> Boolean.FALSE).limit(100)
Run Code Online (Sandbox Code Playgroud)
这也具有(与使用构造函数相比)那些将是相同 Boolean实例的优点,而不是100个不同但相等的实例.
你可以用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()解决方案相比,它不需要更多存储,无论所需大小如何.