[英]Generate stream of Boolean
如何創建長度為100的Boolean.FALSE
流?
我一直在努力的是:
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
流嗎?
即使Boolean
沒有no-arg構造函數,您仍然可以使用lambda來使用Stream.generate
:
Stream.generate(() -> Boolean.FALSE).limit(100)
與使用構造函數相比,這還有一個優勢,即它們將是相同的 Boolean
實例,而不是100個不同但相等的實例。
您可以使用Collections
的static <T> List<T> nCopies(int n, T o)
:
Collections.nCopies (100, Boolean.FALSE).stream()...
請注意, nCopies
返回的List
tiny (it contains a single reference to the data object).
,因此與Stream.generate().limit()
解決方案相比,它不需要更多的存儲空間,而無需考慮大小。
當然,您可以直接創建流
Stream.Builder<Boolean> builder = Stream.builder();
for( int i = 0; i < 100; i++ )
builder.add( false );
Stream<Boolean> stream = builder.build();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.