簡體   English   中英

生成布爾流

[英]Generate stream of Boolean

如何創建長度為100的Boolean.FALSE流?

我一直在努力的是:

  1. 最初,我打算創建一個Boolean.FALSE數組。 但是new Boolean[100]返回一個NULL數組。 因此,我合理地考慮將流API用作方便的Iterable和幾乎( 1Iterable操作工具;
  2. 沒有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個不同但相等的實例。

您可以使用Collectionsstatic <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM