インタフェースDoubleStream
- ã™ã¹ã¦ã®ã‚¹ãƒ¼ãƒ‘ー・インタフェース:
AutoCloseable,BaseStream<Double, DoubleStream>
Streamã«å¯¾ã—ã¦doubleプリミティブ特殊化を行ã£ãŸã‚‚ã®ã§ã™ã€‚
次ã®ä¾‹ã¯ã€Streamã¨DoubleStreamを使ã£ã¦èµ¤è‰²ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®é‡ã•ã®åˆè¨ˆã‚’計算ã™ã‚‹é›†è¨ˆæ“作を示ã—ãŸã‚‚ã®ã§ã™ã€‚
double sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToDouble(w -> w.getWeight())
.sum();
ストリームã€ã‚¹ãƒˆãƒªãƒ¼ãƒ æ“作ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ・パイプラインã€ãŠã‚ˆã³ä¸¦åˆ—性ã®è©³ã—ã„仕様ã«ã¤ã„ã¦ã¯ã€Streamã®ã‚¯ãƒ©ã‚¹ãƒ»ãƒ‰ã‚ュメントやjava.util.streamã®ãƒ‘ッケージ・ドã‚ュメントをå‚ç…§ã—ã¦ãã ã•ã„。- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 1.8
- é–¢é€£é …ç›®:
-
ãƒã‚¹ãƒˆã•れãŸã‚¯ãƒ©ã‚¹ã®ã‚µãƒžãƒªãƒ¼
ãƒã‚¹ãƒˆã•れãŸã‚¯ãƒ©ã‚¹ä¿®é£¾åã¨åž‹ã‚¤ãƒ³ã‚¿ãƒ•ェース説明static interfaceDoubleStreamã®å¯å¤‰ãƒ“ルダーã§ã™ã€‚static interfacedouble値ã®å¼•æ•°ãŠã‚ˆã³DoubleConsumerã‚’å—ã‘入れã€çµæžœã‚’è¿”ã•ãªã„演算を表ã—ã¾ã™ã€‚ -
メソッドã®ã‚µãƒžãƒªãƒ¼
修飾åã¨åž‹ãƒ¡ã‚½ãƒƒãƒ‰èª¬æ˜ŽbooleanallMatch(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã™ã¹ã¦ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚booleananyMatch(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã„ãšã‚Œã‹ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚average()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®ç®—è¡“å¹³å‡ã‚’記述ã™ã‚‹OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒç©ºã®å ´åˆã¯ç©ºã®Optionalã‚’è¿”ã—ã¾ã™ã€‚boxed()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ ã‚’Doubleã«ãƒœã‚¯ã‚·ãƒ³ã‚°ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるStreamã‚’è¿”ã—ã¾ã™ã€‚static DoubleStream.Builderbuilder()DoubleStreamã®ãƒ“ルダーを返ã—ã¾ã™ã€‚<R> Rcollect(Supplier<R> supplier, ObjDoubleConsumer<R> accumulator, BiConsumer<R, R> combiner) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã—ã¦å¯å¤‰ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³æ“作を実行ã—ã¾ã™ã€‚static DoubleStreamconcat(DoubleStream a, DoubleStream b) 最åˆã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å…¨è¦ç´ ã¨2番目ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å…¨è¦ç´ を連çµã—ãŸã‚‚ã®ã‚’è¦ç´ ã«æŒã¤ã€é…延連çµã‚¹ãƒˆãƒªãƒ¼ãƒ を作æˆã—ã¾ã™ã€‚longcount()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®å€‹æ•°ã‚’è¿”ã—ã¾ã™ã€‚distinct()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®é‡è¤‡ã‚’除ã„ãŸè¦ç´ ã‹ã‚‰æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚default DoubleStreamdropWhile(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ã„ã‚‹å ´åˆã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹è¦ç´ ã®æœ€é•·ã®ãƒ—レフィクスを削除ã—ãŸå¾Œã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æ®‹ã‚Šã®è¦ç´ ã§æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚static DoubleStreamempty()空ã®é †æ¬¡DoubleStreamã‚’è¿”ã—ã¾ã™ã€‚filter(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®ã†ã¡ã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã‚‚ã®ã‹ã‚‰æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚findAny()ストリームã®ä¸€éƒ¨ã®è¦ç´ を記述ã™ã‚‹OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ストリームãŒç©ºã®å ´åˆã¯ç©ºã®OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€åˆã®è¦ç´ を記述ã™ã‚‹OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ストリームãŒç©ºã®å ´åˆã¯ç©ºã®OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚flatMap(DoubleFunction<? extends DoubleStream> mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ をマップã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ (指定ã•れãŸãƒžãƒƒãƒ”ング関数をå„è¦ç´ ã«é©ç”¨ã™ã‚‹ã“ã¨ã§å¾—られる)ã®å†…容ã§ç½®ãæ›ãˆãŸçµæžœã‹ã‚‰æˆã‚‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã—ã¾ã™ã€‚voidforEach(DoubleConsumer action) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ ã«å¯¾ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚voidforEachOrdered(DoubleConsumer action) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ ã«å¯¾ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚æ¤œå‡ºé †ãŒå®šç¾©ã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ã§ã¯ã€å„è¦ç´ ãŒæ¤œå‡ºé †ã«å‡¦ç†ã•れるã“ã¨ãŒä¿è¨¼ã•れã¾ã™ã€‚static DoubleStream指定ã•れãŸDoubleSupplierã«ã‚ˆã£ã¦ç”Ÿæˆã•れるè¦ç´ ã‚’å«ã‚€ã€é †åºä»˜ã‘ã•れã¦ã„ãªã„ç„¡é™é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã—ã¾ã™ã€‚static DoubleStreamiterate(double seed, DoublePredicate hasNext, DoubleUnaryOperator next) 指定ã•れãŸnextファンクションã®å復é©ç”¨ã«ã‚ˆã£ã¦ç”Ÿæˆã•れãŸé †æ¬¡é †åºä»˜ã‘ã•れãŸDoubleStreamã‚’ã€æŒ‡å®šã•れãŸhasNext述語を満ãŸã™æ¡ä»¶ä»˜ãåˆæœŸè¦ç´ ã«æˆ»ã—ã¾ã™ã€‚static DoubleStreamiterate(double seed, DoubleUnaryOperator f) åˆæœŸè¦ç´seedã«é–¢æ•°fを繰り返ã—é©ç”¨ã™ã‚‹ã“ã¨ã§ç”Ÿæˆã•れるã€é †åºä»˜ã‘ã•れãŸç„¡é™é †æ¬¡DoubleStreamã‚’è¿”ã—ã¾ã™(seedã€f(seed)ã€f(f(seed))ã€ã¨ã„ã£ãŸè¦ç´ ã‹ã‚‰æˆã‚‹StreamãŒç”Ÿæˆã•れる)。limit(long maxSize) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã‚’maxSize以内ã®é•·ã•ã«åˆ‡ã‚Šè©°ã‚ãŸçµæžœã‹ã‚‰æˆã‚‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã—ã¾ã™ã€‚map(DoubleUnaryOperator mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«æŒ‡å®šã•れãŸé–¢æ•°ã‚’é©ç”¨ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚default DoubleStreamã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ を複数ã®è¦ç´ (特ã«ã‚¼ãƒå€‹ä»¥ä¸Šã®è¦ç´ )ã§ç½®ãæ›ãˆãŸçµæžœã§æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚mapToInt(DoubleToIntFunction mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«æŒ‡å®šã•れãŸé–¢æ•°ã‚’é©ç”¨ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるIntStreamã‚’è¿”ã—ã¾ã™ã€‚mapToLong(DoubleToLongFunction mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«æŒ‡å®šã•れãŸé–¢æ•°ã‚’é©ç”¨ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるLongStreamã‚’è¿”ã—ã¾ã™ã€‚<U> Stream<U> mapToObj(DoubleFunction<? extends U> mapper) 指定ã•れãŸé–¢æ•°ã‚’ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«é©ç”¨ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるã€ã‚ªãƒ–ジェクト値ã®Streamã‚’è¿”ã—ã¾ã™ã€‚max()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€å¤§è¦ç´ を記述ã™ã‚‹OptionalDoubleã¾ãŸã¯ç©ºã®OptionalDouble(ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒç©ºã®å ´åˆ)ã‚’è¿”ã—ã¾ã™ã€‚min()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€å°è¦ç´ を記述ã™ã‚‹OptionalDoubleã¾ãŸã¯ç©ºã®OptionalDouble(ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒç©ºã®å ´åˆ)ã‚’è¿”ã—ã¾ã™ã€‚booleannoneMatch(DoublePredicate predicate) 指定ã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹è¦ç´ ãŒã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ 内ã«å˜åœ¨ã—ãªã„ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚static DoubleStreamof(double t) å˜ä¸€è¦ç´ ã‚’å«ã‚€é †æ¬¡DoubleStreamã‚’è¿”ã—ã¾ã™ã€‚static DoubleStreamof(double... values) 指定ã•れãŸå€¤ã‚’è¦ç´ ã«æŒã¤ã€é †åºä»˜ã‘ã•れãŸé †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã—ã¾ã™ã€‚peek(DoubleConsumer action) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã‹ã‚‰æˆã‚‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã™ã»ã‹ã€ãã®çµæžœã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‹ã‚‰æ¶ˆè²»ã•れるå„è¦ç´ ã«å¯¾ã—ã€æŒ‡å®šã•れãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚doublereduce(double identity, DoubleBinaryOperator op) 指定ã•れãŸå˜ä½å…ƒã®å€¤ã¨çµåˆçš„ãªç´¯ç©é–¢æ•°ã‚’使ã£ã¦ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã—ã¦ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã€ãƒªãƒ‡ãƒ¥ãƒ¼ã‚¹ã•れãŸå€¤ã‚’è¿”ã—ã¾ã™ã€‚çµåˆçš„ç´¯ç©é–¢æ•°ã‚’使用ã—ã¦ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã—ã¦ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã€ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã•れãŸå€¤ã‚’記述ã™ã‚‹OptionalDoubleã‚’è¿”ã—ã¾ã™(ã‚ã‚‹å ´åˆ)。skip(long n) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€åˆã®n個ã®è¦ç´ ã‚’ç ´æ£„ã—ãŸæ®‹ã‚Šã®è¦ç´ ã§æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚sorted()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã§æ§‹æˆã•れるストリームをソートã•れãŸé †åºã§è¿”ã—ã¾ã™ã€‚doublesum()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ 内ã®è¦ç´ ã®åˆè¨ˆã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«é–¢ã™ã‚‹å„種ã®ã‚µãƒžãƒªãƒ¼ãƒ»ãƒ‡ãƒ¼ã‚¿ã‚’記述ã™ã‚‹DoubleSummaryStatisticsã‚’è¿”ã—ã¾ã™ã€‚default DoubleStreamtakeWhile(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ã„ã‚‹å ´åˆã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‹ã‚‰å–å¾—ã•れãŸè¦ç´ ã®æœ€é•·ã®ãƒ—ãƒ¬ãƒ•ã‚£ã‚¯ã‚¹ã§æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚double[]toArray()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã‚’å«ã‚€é…列を返ã—ã¾ã™ã€‚インタフェースjava.util.stream.BaseStreamã§å®£è¨€ã•れãŸãƒ¡ã‚½ãƒƒãƒ‰
close, isParallel, iterator, onClose, parallel, sequential, spliterator, unordered
-
メソッドã®è©³ç´°
-
filter
DoubleStream filter(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®ã†ã¡ã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã‚‚ã®ã‹ã‚‰æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
- パラメータ:
predicate- å„è¦ç´ ã‚’å«ã‚ã‚‹ã¹ãã‹åˆ¤å®šã™ã‚‹ç›®çš„ã§å„è¦ç´ ã«é©ç”¨ã™ã‚‹ã€éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªè¿°èªž- 戻り値:
- æ–°ã—ã„ストリーãƒ
-
map
DoubleStream map(DoubleUnaryOperator mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«æŒ‡å®šã•れãŸé–¢æ•°ã‚’é©ç”¨ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
- パラメータ:
mapper- å„è¦ç´ ã«é©ç”¨ã™ã‚‹éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªé–¢æ•°- 戻り値:
- æ–°ã—ã„ストリーãƒ
-
mapToObj
<U> Stream<U> mapToObj(DoubleFunction<? extends U> mapper) 指定ã•れãŸé–¢æ•°ã‚’ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«é©ç”¨ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるã€ã‚ªãƒ–ジェクト値ã®Streamã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
- 型パラメータ:
U- æ–°ã—ã„ストリームã®è¦ç´ タイプ- パラメータ:
mapper- å„è¦ç´ ã«é©ç”¨ã™ã‚‹éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªé–¢æ•°- 戻り値:
- æ–°ã—ã„ストリーãƒ
-
mapToInt
IntStream mapToInt(DoubleToIntFunction mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«æŒ‡å®šã•れãŸé–¢æ•°ã‚’é©ç”¨ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるIntStreamã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
- パラメータ:
mapper- å„è¦ç´ ã«é©ç”¨ã™ã‚‹éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªé–¢æ•°- 戻り値:
- æ–°ã—ã„ストリーãƒ
-
mapToLong
LongStream mapToLong(DoubleToLongFunction mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«æŒ‡å®šã•れãŸé–¢æ•°ã‚’é©ç”¨ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるLongStreamã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
- パラメータ:
mapper- å„è¦ç´ ã«é©ç”¨ã™ã‚‹éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªé–¢æ•°- 戻り値:
- æ–°ã—ã„ストリーãƒ
-
flatMap
DoubleStream flatMap(DoubleFunction<? extends DoubleStream> mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ をマップã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ (指定ã•れãŸãƒžãƒƒãƒ”ング関数をå„è¦ç´ ã«é©ç”¨ã™ã‚‹ã“ã¨ã§å¾—られる)ã®å†…容ã§ç½®ãæ›ãˆãŸçµæžœã‹ã‚‰æˆã‚‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã—ã¾ã™ã€‚ å„マップ先ストリームã¯ã€ãã®å†…容ãŒã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ 内ã«é…ç½®ã•れるã¨ã‚¯ãƒãƒ¼ã‚ºã•れã¾ã™ã€‚ (マップ先ストリームãŒnullã®å ´åˆã¯ã‹ã‚りã«ç©ºã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒä½¿ç”¨ã•れã¾ã™ã€‚)ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
- パラメータ:
mapper- æ–°ã—ã„値ã®DoubleStreamを生æˆã™ã‚‹ãŸã‚ã«å„è¦ç´ ã«é©ç”¨ã™ã‚‹ã€éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªé–¢æ•°- 戻り値:
- æ–°ã—ã„ストリーãƒ
- é–¢é€£é …ç›®:
-
mapMulti
default DoubleStream mapMulti(DoubleStream.DoubleMapMultiConsumer mapper) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ を複数ã®è¦ç´ (特ã«ã‚¼ãƒå€‹ä»¥ä¸Šã®è¦ç´ )ã§ç½®ãæ›ãˆãŸçµæžœã§æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚ ç½®æ›ã‚’実行ã™ã‚‹ã«ã¯ã€ç½®æ›è¦ç´ ã‚’å—ã‘入れるconsumer引数ã¨ã¨ã‚‚ã«ã€æŒ‡å®šã•れãŸãƒžãƒƒãƒ”ング関数をå„è¦ç´ ã«é©ç”¨ã—ã¾ã™ã€‚ マッピング関数ã¯ã€ã‚³ãƒ³ã‚·ãƒ¥ãƒ¼ãƒžã‚’ゼãƒå›žä»¥ä¸Šã‚³ãƒ¼ãƒ«ã—ã¦ç½®æ›è¦ç´ ã‚’æä¾›ã—ã¾ã™ã€‚ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
consumer引数ãŒãƒžãƒƒãƒ”ング関数ã«å¯¾ã™ã‚‹ã‚¢ãƒ—リケーションã®ã‚¹ã‚³ãƒ¼ãƒ—外ã§ä½¿ç”¨ã•れã¦ã„ã‚‹å ´åˆã€çµæžœã¯æœªå®šç¾©ã§ã™ã€‚
- 実装è¦ä»¶:
- デフォルト実装ã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã§
flatMapを呼ã³å‡ºã—ã€æ¬¡ã®ã‚ˆã†ã«å‹•作ã™ã‚‹é–¢æ•°ã‚’渡ã—ã¾ã™ã€‚ 最åˆã«ã€æ–°ã—ã作æˆã•れãŸå†…部ãƒãƒƒãƒ•ã‚¡ã«ç½®æ›è¦ç´ ã‚’è“„ç©ã™ã‚‹DoubleConsumerを使用ã—ã¦ãƒžãƒƒãƒ‘ー関数をコールã—ã¾ã™ã€‚ ãƒžãƒƒãƒ‘ãƒ¼é–¢æ•°ãŒæˆ»ã‚‹ã¨ã€å†…部ãƒãƒƒãƒ•ã‚¡ã‹ã‚‰DoubleStreamãŒä½œæˆã•れã¾ã™ã€‚ 最後ã«ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’flatMapã«è¿”ã—ã¾ã™ã€‚ - パラメータ:
mapper- ç½®æ›è¦ç´ を生æˆã™ã‚‹non-interferingã€statelessファンクション- 戻り値:
- æ–°ã—ã„ストリーãƒ
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 16
- é–¢é€£é …ç›®:
-
distinct
DoubleStream distinct()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®é‡è¤‡ã‚’除ã„ãŸè¦ç´ ã‹ã‚‰æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚ è¦ç´ ãŒç‰ã—ã„ã‹ã©ã†ã‹ã®æ¯”較ã¯ã€Double.compare(double, double)ã«å¾“ã£ã¦è¡Œã‚れã¾ã™ã€‚ã“れã¯ã‚¹ãƒ†ãƒ¼ãƒˆãƒ•ルãªä¸é–“æ“作ã§ã™ã€‚
- 戻り値:
- çµæžœã®ã‚¹ãƒˆãƒªãƒ¼ãƒ
-
sorted
DoubleStream sorted()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã§æ§‹æˆã•れるストリームをソートã•れãŸé †åºã§è¿”ã—ã¾ã™ã€‚ è¦ç´ ãŒç‰ã—ã„ã‹ã©ã†ã‹ã®æ¯”較ã¯ã€Double.compare(double, double)ã«å¾“ã£ã¦è¡Œã‚れã¾ã™ã€‚ã“れã¯ã‚¹ãƒ†ãƒ¼ãƒˆãƒ•ルãªä¸é–“æ“作ã§ã™ã€‚
- 戻り値:
- çµæžœã®ã‚¹ãƒˆãƒªãƒ¼ãƒ
-
peek
DoubleStream peek(DoubleConsumer action) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã‹ã‚‰æˆã‚‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã™ã»ã‹ã€ãã®çµæžœã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‹ã‚‰æ¶ˆè²»ã•れるå„è¦ç´ ã«å¯¾ã—ã€æŒ‡å®šã•れãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
並列ストリーム・パイプラインã®å ´åˆã€ä¸Šæµã®æ“作ã«ã‚ˆã£ã¦ç”¨æ„ã•れãŸå„è¦ç´ ã«å¯¾ã—ã€ä»»æ„ã®ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§ä»»æ„ã®ã‚¹ãƒ¬ãƒƒãƒ‰å†…ã§ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒå‘¼ã³å‡ºã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ アクションãŒå…±æœ‰çŠ¶æ…‹ã‚’å¤‰æ›´ã™ã‚‹å ´åˆã€å¿…è¦ãªåŒæœŸã‚’æä¾›ã™ã‚‹è²¬ä»»ã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚りã¾ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®ä¸»ãªå˜åœ¨ç†ç”±ã¯ã€è¦ç´ ãŒãƒ‘イプライン内ã®ç‰¹å®šã®ãƒã‚¤ãƒ³ãƒˆã‚’通éŽã™ã‚‹éš›ã«ãã®å†…容を確èªã™ã‚‹ã‚ˆã†ãªãƒ‡ãƒãƒƒã‚°ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ã«ã‚りã¾ã™ã€‚
DoubleStream.of(1, 2, 3, 4) .filter(e -> e > 2) .peek(e -> System.out.println("Filtered value: " + e)) .map(e -> e * e) .peek(e -> System.out.println("Mapped value: " + e)) .sum();ストリーム実装ã§ã€ä¸€éƒ¨ã¾ãŸã¯ã™ã¹ã¦ã®è¦ç´ (
findFirstã®ã‚ˆã†ãªçŸçµ¡æ“作やcount()ã«è¨˜è¼‰ã•れã¦ã„る例)ã®ç”Ÿæˆã‚’最é©åŒ–ã§ãã‚‹å ´åˆã€ãれらã®è¦ç´ ã«å¯¾ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å‘¼ã³å‡ºã•れã¾ã›ã‚“。 - パラメータ:
action- ストリームã‹ã‚‰æ¶ˆè²»ã•れるè¦ç´ ã«å¯¾ã—ã¦å®Ÿè¡Œã™ã¹ãéžå¹²æ¸‰ã‚¢ã‚¯ã‚·ãƒ§ãƒ³- 戻り値:
- æ–°ã—ã„ストリーãƒ
-
limit
DoubleStream limit(long maxSize) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã‚’maxSize以内ã®é•·ã•ã«åˆ‡ã‚Šè©°ã‚ãŸçµæžœã‹ã‚‰æˆã‚‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ•ルãªçŸçµ¡ä¸é–“æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
limit()ã¯ã€é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ・パイプラインã§ã¯ä¸€èˆ¬ã«ä½Žã‚³ã‚¹ãƒˆã®æ“作ã§ã™ãŒã€é †åºä»˜ã‘ã•れãŸä¸¦åˆ—パイプラインã§ã¯ã‚³ã‚¹ãƒˆãŒéžå¸¸ã«é«˜ããªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™(特ã«maxSizeã®å€¤ãŒå¤§ãã„å ´åˆ)。任æ„ã®n個ã®è¦ç´ ã‚’è¿”ã™ã ã‘ã§ãªãã€æ¤œå‡ºé †ã§ã®æœ€åˆã®n個ã®è¦ç´ ã‚’è¿”ã•ãªã‘れã°ã„ã‘ãªã„ã€ã¨ã„ã†åˆ¶ç´„ãŒlimit(n)ã«èª²ã•れるã‹ã‚‰ã§ã™ã€‚ 状æ³ã®ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ã‚¹ãŒè¨±ã›ã°ã€é †åºä»˜ã‘ã•れã¦ã„ãªã„ストリーム・ソース(generate(DoubleSupplier)ãªã©)を使用ã™ã‚‹ã‹ã€BaseStream.unordered()ã§é †åºä»˜ã‘ã®åˆ¶ç´„ã‚’ãªãã›ã°ã€ä¸¦åˆ—パイプラインã®limit()ãŒå¤§å¹…ã«é«˜é€ŸåŒ–ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ æ¤œå‡ºé †åºã¨ã®æ•´åˆæ€§ãŒå¿…è¦ã§ã€ã‹ã¤ä¸¦åˆ—パイプラインã§ã®limit()ã®ãƒ‘フォーマンスやメモリー使用é‡ã«å•題ãŒã‚ã‚‹å ´åˆã«ã¯ã€BaseStream.sequential()ã§é †æ¬¡å®Ÿè¡Œã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã¨ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ãŒæ”¹å–„ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚- パラメータ:
maxSize- ストリームã®è¦ç´ æ•°ã®ä¸Šé™- 戻り値:
- æ–°ã—ã„ストリーãƒ
- スãƒãƒ¼:
IllegalArgumentException-maxSizeãŒè² ã®å ´åˆ
-
skip
DoubleStream skip(long n) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€åˆã®n個ã®è¦ç´ ã‚’ç ´æ£„ã—ãŸæ®‹ã‚Šã®è¦ç´ ã§æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚ ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«å«ã¾ã‚Œã‚‹è¦ç´ ã®æ•°ãŒn個より少ãªã„å ´åˆã¯ã€ç©ºã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒè¿”ã•れã¾ã™ã€‚ã“れã¯ã‚¹ãƒ†ãƒ¼ãƒˆãƒ•ルãªä¸é–“æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
skip()ã¯ã€é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ・パイプラインã§ã¯ä¸€èˆ¬ã«ä½Žã‚³ã‚¹ãƒˆã®æ“作ã§ã™ãŒã€é †åºä»˜ã‘ã•れãŸä¸¦åˆ—パイプラインã§ã¯ã‚³ã‚¹ãƒˆãŒéžå¸¸ã«é«˜ããªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™(特ã«nã®å€¤ãŒå¤§ãã„å ´åˆ)。任æ„ã®n個ã®è¦ç´ をスã‚ップã™ã‚‹ã ã‘ã§ãªãã€æ¤œå‡ºé †ã§ã®æœ€åˆã®n個ã®è¦ç´ をスã‚ップã—ãªã‘れã°ã„ã‘ãªã„ã€ã¨ã„ã†åˆ¶ç´„ãŒskip(n)ã«èª²ã•れるã‹ã‚‰ã§ã™ã€‚ 状æ³ã®ã‚»ãƒžãƒ³ãƒ†ã‚£ãƒƒã‚¯ã‚¹ãŒè¨±ã›ã°ã€é †åºä»˜ã‘ã•れã¦ã„ãªã„ストリーム・ソース(generate(DoubleSupplier)ãªã©)を使用ã™ã‚‹ã‹ã€BaseStream.unordered()ã§é †åºä»˜ã‘ã®åˆ¶ç´„ã‚’ãªãã›ã°ã€ä¸¦åˆ—パイプラインã®skip()ãŒå¤§å¹…ã«é«˜é€ŸåŒ–ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ æ¤œå‡ºé †åºã¨ã®æ•´åˆæ€§ãŒå¿…è¦ã§ã€ã‹ã¤ä¸¦åˆ—パイプラインã§ã®skip()ã®ãƒ‘フォーマンスやメモリー使用é‡ã«å•題ãŒã‚ã‚‹å ´åˆã«ã¯ã€BaseStream.sequential()ã§é †æ¬¡å®Ÿè¡Œã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã¨ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ãŒæ”¹å–„ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚- パラメータ:
n- スã‚ップã™ã‚‹å…ˆé è¦ç´ ã®æ•°- 戻り値:
- æ–°ã—ã„ストリーãƒ
- スãƒãƒ¼:
IllegalArgumentException-nãŒè² ã®å ´åˆ
-
takeWhile
default DoubleStream takeWhile(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ã„ã‚‹å ´åˆã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‹ã‚‰å–å¾—ã•れãŸè¦ç´ ã®æœ€é•·ã®ãƒ—ãƒ¬ãƒ•ã‚£ã‚¯ã‚¹ã§æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚ ãれ以外ã®å ´åˆã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘られã¦ã„ãªã„å ´åˆã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‹ã‚‰å–å¾—ã•れãŸè¦ç´ ã®ã‚µãƒ–ã‚»ãƒƒãƒˆã§æ§‹æˆã•れるストリームãŒè¿”ã•れã¾ã™ã€‚ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ã„ã‚‹å ´åˆã€æœ€é•·ã®ãƒ—レフィクスã¯ã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®é€£ç¶šã—ãŸã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã§ã™ã€‚ é †åºã®æœ€åˆã®è¦ç´ ã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€åˆã®è¦ç´ ã§ã‚りã€é †åºã®æœ€å¾Œã®è¦ç´ ã®ç›´å¾Œã®è¦ç´ ã¯ã€æŒ‡å®šã•れãŸè¿°èªžã¨ä¸€è‡´ã—ã¾ã›ã‚“。
ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ãŠã‚‰ãšã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ä¸€éƒ¨ã®(ã™ã¹ã¦ã§ã¯ãªã„)è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã¨ä¸€è‡´ã™ã‚‹å ´åˆã€ã“ã®æ“作ã®å‹•作ã¯éžæ±ºå®šçš„ã§ã‚りã€ä¸€è‡´ã™ã‚‹è¦ç´ (空ã®ã‚»ãƒƒãƒˆã‚’å«ã‚€)ã®ã‚µãƒ–セットを自由ã«å–å¾—ã§ãã¾ã™ã€‚
ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã™ã¹ã¦ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹å ´åˆã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘られã¦ã„ã‚‹ã‹ã©ã†ã‹ã«ã‹ã‹ã‚らãšã€ã“ã®æ“作ã§ã¯ã™ã¹ã¦ã®è¦ç´ (çµæžœã¯å…¥åŠ›ã¨åŒã˜ã§ã™)ãŒä½¿ç”¨ã•れã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã—ãªã„å ´åˆã¯(çµæžœã¯ç©ºã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã§ã™)ã¯ä½¿ç”¨ã•れã¾ã›ã‚“。
ã“れã¯ã€ã‚¹ãƒ†ãƒ¼ãƒˆãƒ•ルãªçŸçµ¡ä¸é–“æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
takeWhile()ã¯ã€é€šå¸¸ã€é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ・パイプラインã«å¯¾ã™ã‚‹å®‰ä¾¡ãªæ“作ã§ã™ãŒã€é †åºä»˜ã‘られãŸãƒ‘ラレル・パイプラインã§ã¯éžå¸¸ã«ã‚³ã‚¹ãƒˆãŒã‹ã‹ã‚Šã¾ã™ã€‚ã“れã¯ã€æ“作ãŒã€æœ‰åйãªãƒ—レフィクスã®ã¿ã§ãªãã€æ¤œå‡ºé †åºã«ãŠã‘ã‚‹è¦ç´ ã®æœ€é•·ã®ãƒ—レフィクスを返ã™ã‚ˆã†ã«åˆ¶ç´„ã•れるãŸã‚ã§ã™ã€‚ 状æ³ã®ã‚»ãƒžãƒ³ãƒ†ã‚£ã‚¯ã‚¹ã§è¨±å¯ã•れã¦ã„ã‚‹å ´åˆã€é †åºä»˜ã‘ã•れã¦ã„ãªã„ストリーム・ソース(generate(DoubleSupplier)ãªã©)を使用ã™ã‚‹ã‹ã€BaseStream.unordered()ã§é †åºä»˜ã‘制約を削除ã™ã‚‹ã¨ã€ãƒ‘ラレル・パイプラインã§takeWhile()ãŒå¤§å¹…ã«é«˜é€ŸåŒ–ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ 出ç¾é †åºã®ä¸€è²«æ€§ãŒå¿…è¦ã§ã€ãƒ‘ラレル・パイプラインã§takeWhile()を使用ã—ãŸãƒ‘フォーマンスã¾ãŸã¯ãƒ¡ãƒ¢ãƒªãƒ¼ä½¿ç”¨çއãŒä½Žä¸‹ã—ã¦ã„ã‚‹å ´åˆã€BaseStream.sequential()を使用ã—ã¦é †æ¬¡å®Ÿè¡Œã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã¨ã€ãƒ‘フォーマンスãŒå‘上ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚- 実装è¦ä»¶:
- デフォルトã®å®Ÿè£…ã§ã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®
spliteratorã‚’å–å¾—ã—ã€ãã®ã‚¹ãƒ—リッタをラップã—ã¦ãƒˆãƒ©ãƒãƒ¼ã‚µãƒ«ã«å¯¾ã™ã‚‹ã“ã®æ“作ã®ã‚»ãƒžãƒ³ãƒ†ã‚£ã‚¯ã‚¹ã‚’サãƒãƒ¼ãƒˆã—ã€ãƒ©ãƒƒãƒ—ã•れãŸã‚¹ãƒ—リッタã«é–¢é€£ä»˜ã‘ã‚‰ã‚ŒãŸæ–°ã—ã„ストリームを返ã—ã¾ã™ã€‚ 戻ã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ (BaseStream.isParallel()ã«ã‚ˆã‚‹ä¸¦åˆ—実行ã¾ãŸã¯é †æ¬¡å®Ÿè¡Œ)ã®å®Ÿè¡Œç‰¹æ€§ã‚’ä¿æŒã—ã¾ã™ãŒã€ãƒ©ãƒƒãƒ—ã•れãŸã‚¹ãƒ—リッタã¯åˆ†å‰²ã‚’サãƒãƒ¼ãƒˆã—ãªã„ã“ã¨ã‚’é¸æŠžã§ãã¾ã™ã€‚ è¿”ã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé–‰ã˜ã‚‰ã‚Œã‚‹ã¨ã€è¿”ã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ã¨ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ä¸¡æ–¹ã®ã‚¯ãƒãƒ¼ã‚ºãƒ»ãƒãƒ³ãƒ‰ãƒ©ãŒèµ·å‹•ã•れã¾ã™ã€‚ - パラメータ:
predicate- è¦ç´ ã®æœ€é•·ã®ãƒ—レフィクスを決定ã™ã‚‹ãŸã‚ã«è¦ç´ ã«é©ç”¨ã™ã‚‹non-interferingã€stateless述語。- 戻り値:
- æ–°ã—ã„ストリーãƒ
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 9
-
dropWhile
default DoubleStream dropWhile(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ã„ã‚‹å ´åˆã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹è¦ç´ ã®æœ€é•·ã®ãƒ—レフィクスを削除ã—ãŸå¾Œã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æ®‹ã‚Šã®è¦ç´ ã§æ§‹æˆã•れるストリームを返ã—ã¾ã™ã€‚ ãれ以外ã®å ´åˆã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘られã¦ã„ãªã„å ´åˆã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹è¦ç´ ã®ã‚µãƒ–セットを削除ã—ãŸå¾Œã«ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æ®‹ã‚Šã®è¦ç´ ã§æ§‹æˆã•れるストリームãŒè¿”ã•れã¾ã™ã€‚ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ã„ã‚‹å ´åˆã€æœ€é•·ã®ãƒ—レフィクスã¯ã€æŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®é€£ç¶šã—ãŸã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã§ã™ã€‚ é †åºã®æœ€åˆã®è¦ç´ ã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€åˆã®è¦ç´ ã§ã‚りã€é †åºã®æœ€å¾Œã®è¦ç´ ã®ç›´å¾Œã®è¦ç´ ã¯ã€æŒ‡å®šã•れãŸè¿°èªžã¨ä¸€è‡´ã—ã¾ã›ã‚“。
ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ãŠã‚‰ãšã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ä¸€éƒ¨ã®(ã™ã¹ã¦ã§ã¯ãªã„)è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã¨ä¸€è‡´ã™ã‚‹å ´åˆã€ã“ã®æ“作ã®å‹•作ã¯éžæ±ºå®šçš„ã§ã‚りã€ä¸€è‡´ã™ã‚‹è¦ç´ (空ã®ã‚»ãƒƒãƒˆã‚’å«ã‚€)ã®ã‚µãƒ–セットを自由ã«å‰Šé™¤ã§ãã¾ã™ã€‚
ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã™ã¹ã¦ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã¨ä¸€è‡´ã™ã‚‹å ´åˆã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã«é–¢ä¿‚ãªãã€ã“ã®æ“作ã§ã¯ã™ã¹ã¦ã®è¦ç´ (çµæžœã¯ç©ºã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã§ã™)ãŒå‰Šé™¤ã•れるã‹ã€ã¾ãŸã¯ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã—ãªã„å ´åˆã€è¦ç´ ã¯å‰Šé™¤ã•れã¾ã›ã‚“(çµæžœã¯å…¥åŠ›ã¨åŒã˜ã§ã™)。
ã“れã¯ã‚¹ãƒ†ãƒ¼ãƒˆãƒ•ルãªä¸é–“æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
dropWhile()ã¯ã€é€šå¸¸ã€é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ・パイプラインã«å¯¾ã™ã‚‹å®‰ä¾¡ãªæ“作ã§ã™ãŒã€é †åºä»˜ã‘られãŸãƒ‘ラレル・パイプラインã§ã¯éžå¸¸ã«ã‚³ã‚¹ãƒˆãŒã‹ã‹ã‚Šã¾ã™ã€‚ã“れã¯ã€æ“作ãŒã€æœ‰åйãªãƒ—レフィクスã®ã¿ã§ãªãã€æ¤œå‡ºé †åºã«ãŠã‘ã‚‹è¦ç´ ã®æœ€é•·ã®ãƒ—レフィクスを返ã™ã‚ˆã†ã«åˆ¶ç´„ã•れるãŸã‚ã§ã™ã€‚ 状æ³ã®ã‚»ãƒžãƒ³ãƒ†ã‚£ã‚¯ã‚¹ã§è¨±å¯ã•れã¦ã„ã‚‹å ´åˆã€é †åºä»˜ã‘ã•れã¦ã„ãªã„ストリーム・ソース(generate(DoubleSupplier)ãªã©)を使用ã™ã‚‹ã‹ã€BaseStream.unordered()ã§é †åºä»˜ã‘制約を削除ã™ã‚‹ã¨ã€ãƒ‘ラレル・パイプラインã§dropWhile()ãŒå¤§å¹…ã«é«˜é€ŸåŒ–ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ 出ç¾é †åºã®ä¸€è²«æ€§ãŒå¿…è¦ã§ã€ãƒ‘ラレル・パイプラインã§dropWhile()を使用ã—ãŸãƒ‘フォーマンスã¾ãŸã¯ãƒ¡ãƒ¢ãƒªãƒ¼ä½¿ç”¨çއãŒä½Žä¸‹ã—ã¦ã„ã‚‹å ´åˆã€BaseStream.sequential()を使用ã—ã¦é †æ¬¡å®Ÿè¡Œã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã¨ã€ãƒ‘フォーマンスãŒå‘上ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚- 実装è¦ä»¶:
- デフォルトã®å®Ÿè£…ã§ã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®
spliteratorã‚’å–å¾—ã—ã€ãã®ã‚¹ãƒ—リッタをラップã—ã¦ãƒˆãƒ©ãƒãƒ¼ã‚µãƒ«ã«å¯¾ã™ã‚‹ã“ã®æ“作ã®ã‚»ãƒžãƒ³ãƒ†ã‚£ã‚¯ã‚¹ã‚’サãƒãƒ¼ãƒˆã—ã€ãƒ©ãƒƒãƒ—ã•れãŸã‚¹ãƒ—リッタã«é–¢é€£ä»˜ã‘ã‚‰ã‚ŒãŸæ–°ã—ã„ストリームを返ã—ã¾ã™ã€‚ 戻ã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ã¯ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ (BaseStream.isParallel()ã«ã‚ˆã‚‹ä¸¦åˆ—実行ã¾ãŸã¯é †æ¬¡å®Ÿè¡Œ)ã®å®Ÿè¡Œç‰¹æ€§ã‚’ä¿æŒã—ã¾ã™ãŒã€ãƒ©ãƒƒãƒ—ã•れãŸã‚¹ãƒ—リッタã¯åˆ†å‰²ã‚’サãƒãƒ¼ãƒˆã—ãªã„ã“ã¨ã‚’é¸æŠžã§ãã¾ã™ã€‚ è¿”ã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé–‰ã˜ã‚‰ã‚Œã‚‹ã¨ã€è¿”ã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ã¨ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ä¸¡æ–¹ã®ã‚¯ãƒãƒ¼ã‚ºãƒ»ãƒãƒ³ãƒ‰ãƒ©ãŒèµ·å‹•ã•れã¾ã™ã€‚ - パラメータ:
predicate- è¦ç´ ã®æœ€é•·ã®ãƒ—レフィクスを決定ã™ã‚‹ãŸã‚ã«è¦ç´ ã«é©ç”¨ã™ã‚‹non-interferingã€stateless述語。- 戻り値:
- æ–°ã—ã„ストリーãƒ
- å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 9
-
forEach
void forEach(DoubleConsumer action) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ ã«å¯¾ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚ã“れã¯çµ‚端æ“作ã§ã™ã€‚
並列ストリーム・パイプラインã®å ´åˆã€ã“ã®æ“作ã¯ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æ¤œå‡ºé †åºã‚’考慮ã™ã‚‹ã“ã¨ã‚’ä¿è¨¼ã—ã¾ã›ã‚“。ä¿è¨¼ã™ã‚‹ã¨ä¸¦åˆ—性ã®ãƒ¡ãƒªãƒƒãƒˆãŒçŠ ç‰²ã«ãªã‚‹ã‹ã‚‰ã§ã™ã€‚ 与ãˆã‚‰ã‚ŒãŸä»»æ„ã®è¦ç´ ã«å¯¾ã—ã€ãƒ©ã‚¤ãƒ–ラリãŒé¸æŠžã—ãŸä»»æ„ã®ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§ä»»æ„ã®ã‚¹ãƒ¬ãƒƒãƒ‰å†…ã§ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŒå®Ÿè¡Œã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ アクションãŒå…±æœ‰çŠ¶æ…‹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å ´åˆã€å¿…è¦ãªåŒæœŸã‚’æä¾›ã™ã‚‹è²¬ä»»ã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚りã¾ã™ã€‚
- パラメータ:
action- è¦ç´ ã«å¯¾ã—ã¦å®Ÿè¡Œã™ã‚‹éžå¹²æ¸‰ã‚¢ã‚¯ã‚·ãƒ§ãƒ³
-
forEachOrdered
void forEachOrdered(DoubleConsumer action) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ ã«å¯¾ã—ã¦ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚æ¤œå‡ºé †ãŒå®šç¾©ã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ã§ã¯ã€å„è¦ç´ ãŒæ¤œå‡ºé †ã«å‡¦ç†ã•れるã“ã¨ãŒä¿è¨¼ã•れã¾ã™ã€‚ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- パラメータ:
action- è¦ç´ ã«å¯¾ã—ã¦å®Ÿè¡Œã™ã‚‹éžå¹²æ¸‰ã‚¢ã‚¯ã‚·ãƒ§ãƒ³- é–¢é€£é …ç›®:
-
toArray
double[] toArray()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã‚’å«ã‚€é…列を返ã—ã¾ã™ã€‚ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã‚’å«ã‚€é…列
-
reduce
double reduce(double identity, DoubleBinaryOperator op) 指定ã•れãŸå˜ä½å…ƒã®å€¤ã¨çµåˆçš„ãªç´¯ç©é–¢æ•°ã‚’使ã£ã¦ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã—ã¦ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã€ãƒªãƒ‡ãƒ¥ãƒ¼ã‚¹ã•れãŸå€¤ã‚’è¿”ã—ã¾ã™ã€‚ ã“れã¯ã€æ¬¡ã®æ“作ã«ç›¸å½“ã—ã¾ã™ã€‚
ãŸã ã—ã€é †æ¬¡å®Ÿè¡Œã®åˆ¶ç´„ãŒèª²ã•れるã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。double result = identity; for (double element : this stream) result = accumulator.applyAsDouble(result, element) return result;identity値ã¯ã‚¢ã‚ュムレータ関数ã®å˜ä½å…ƒã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“。 ã¤ã¾ã‚Šã€ã™ã¹ã¦ã®xã«ã¤ã„ã¦ã€accumulator.apply(identity, x)ãŒxã«ç‰ã—ããªã‚Šã¾ã™ã€‚ã‚¢ã‚ュムレータ関数ã¯çµåˆçš„ãªé–¢æ•°ã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“。ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- åˆè¨ˆã€æœ€å°ã€æœ€å¤§ã€å¹³å‡ã¯ã™ã¹ã¦ã€ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã®ç‰¹æ®Šãªå ´åˆã§ã™ã€‚ 数値ストリームã®åˆè¨ˆã¯æ¬¡ã®ã‚ˆã†ã«è¡¨ç¾ã§ãã¾ã™ã€‚
ã‚ã‚‹ã„ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã‚ˆã‚Šã‚³ãƒ³ãƒ‘クトã«ã—ã¾ã™ã€‚double sum = numbers.reduce(0, (a, b) -> a+b);double sum = numbers.reduce(0, Double::sum);ã“れã¯ã€å˜ç´”ã«ãƒ«ãƒ¼ãƒ—ã§ä¸é–“åˆè¨ˆã‚’æ›´æ–°ã—ã¦ã„ãæ–¹æ³•ã«æ¯”ã¹ã¦é 回りãªé›†è¨ˆæ–¹æ³•ã«è¦‹ãˆã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³æ“作ã®ä¸¦åˆ—化ãŒå®¹æ˜“ã«è¡Œãˆã€ä¸¦åˆ—化ã®éš›ã«åŒæœŸã‚’è¿½åŠ ã™ã‚‹å¿…è¦ãŒãªãã€ãƒ‡ãƒ¼ã‚¿ç«¶åˆã®ãƒªã‚¹ã‚¯ã‚‚å¤§å¹…ã«æ¸›å°‘ã—ã¾ã™ã€‚
- パラメータ:
identity- è“„ç©é–¢æ•°ã«å¯¾ã™ã‚‹å˜ä½å…ƒã®å€¤op- 2ã¤ã®å€¤ã‚’çµåˆã™ã‚‹ãŸã‚ã®çµåˆçš„ã€éžå¹²æ¸‰ãŠã‚ˆã³ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªé–¢æ•°- 戻り値:
- リダクションã®çµæžœ
- é–¢é€£é …ç›®:
-
reduce
OptionalDouble reduce(DoubleBinaryOperator op) çµåˆçš„ç´¯ç©é–¢æ•°ã‚’使用ã—ã¦ã€ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã—ã¦ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã€ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã•れãŸå€¤ã‚’記述ã™ã‚‹OptionalDoubleã‚’è¿”ã—ã¾ã™(ã‚ã‚‹å ´åˆ)。 ã“れã¯ã€æ¬¡ã®æ“作ã«ç›¸å½“ã—ã¾ã™ã€‚
ãŸã ã—ã€é †æ¬¡å®Ÿè¡Œã®åˆ¶ç´„ãŒèª²ã•れるã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。boolean foundAny = false; double result = null; for (double element : this stream) { if (!foundAny) { foundAny = true; result = element; } else result = accumulator.applyAsDouble(result, element); } return foundAny ? OptionalDouble.of(result) : OptionalDouble.empty();ã‚¢ã‚ュムレータ関数ã¯çµåˆçš„ãªé–¢æ•°ã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“。ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- パラメータ:
op- 2ã¤ã®å€¤ã‚’çµåˆã™ã‚‹ãŸã‚ã®çµåˆçš„ã€éžå¹²æ¸‰ãŠã‚ˆã³ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªé–¢æ•°- 戻り値:
- リダクションã®çµæžœ
- é–¢é€£é …ç›®:
-
collect
<R> R collect(Supplier<R> supplier, ObjDoubleConsumer<R> accumulator, BiConsumer<R, R> combiner) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã—ã¦å¯å¤‰ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³æ“作を実行ã—ã¾ã™ã€‚ å¯å¤‰ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã¨ã¯ã€ãƒªãƒ‡ãƒ¥ãƒ¼ã‚¹å¯¾è±¡ã®å€¤ãŒArrayListã®ã‚ˆã†ãªå¯å¤‰ã®çµæžœã‚³ãƒ³ãƒ†ãƒŠã§ã‚りã€çµæžœã‚’ç½®ãæ›ãˆã‚‹ã‹ã‚りã«çµæžœã®çŠ¶æ…‹ã‚’æ›´æ–°ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦è¦ç´ ãŒçµ„ã¿è¾¼ã¾ã‚Œã‚‹ã‚ˆã†ãªãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã®ã“ã¨ã§ã™ã€‚ ã“ã‚Œã¯æ¬¡ã¨åŒç‰ã®çµæžœã‚’生æˆã—ã¾ã™ã€‚R result = supplier.get(); for (double element : this stream) accumulator.accept(result, element); return result;collectæ“作ã¯reduce(double, DoubleBinaryOperator)ã¨åŒæ§˜ã€åŒæœŸã‚’è¿½åŠ ã—ãªãã¦ã‚‚並列化ã§ãã¾ã™ã€‚ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- 型パラメータ:
R- å¯å¤‰çµæžœã‚³ãƒ³ãƒ†ãƒŠã®åž‹- パラメータ:
supplier- æ–°ã—ã„å¯å¤‰çµæžœã‚³ãƒ³ãƒ†ãƒŠã‚’作æˆã™ã‚‹é–¢æ•°ã€‚ 並列実行ã®å ´åˆã€ã“ã®é–¢æ•°ã¯è¤‡æ•°å›žå‘¼ã³å‡ºã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€ãã®ãŸã³ã«æ–°ã—ã„値を返ã™å¿…è¦ãŒã‚りã¾ã™ã€‚accumulator- çµæžœã‚³ãƒ³ãƒ†ãƒŠã«è¦ç´ を折りãŸãŸã‚€å¿…è¦ãŒã‚ã‚‹associativeã€non-interferingã€statelessファンクション。combiner- 2ã¤ã®éƒ¨åˆ†çš„ãªçµæžœã‚³ãƒ³ãƒ†ãƒŠã‚’å—ã‘入れã€ãれらをマージã™ã‚‹associativeã€non-interferingã€stateless関数。ã“れã¯ã€ç´¯è¨ˆé–¢æ•°ã¨äº’æ›æ€§ãŒã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ コンãƒã‚¤ãƒŠé–¢æ•°ã¯ã€2番目ã®çµæžœã‚³ãƒ³ãƒ†ãƒŠã‹ã‚‰1番目ã®çµæžœã‚³ãƒ³ãƒ†ãƒŠã«è¦ç´ を折りãŸãŸã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚- 戻り値:
- リダクションã®çµæžœ
- é–¢é€£é …ç›®:
-
sum
double sum()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ 内ã®è¦ç´ ã®åˆè¨ˆã‚’è¿”ã—ã¾ã™ã€‚ åˆè¨ˆã¯ã€ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã®ç‰¹æ®Šãªå ´åˆã§ã™ã€‚ æµ®å‹•å°æ•°ç‚¹åˆè¨ˆãŒæ£ç¢ºã§ã‚れã°ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯æ¬¡ã¨åŒç‰ã«ãªã‚Šã¾ã™ã€‚
ã—ã‹ã—ã€æµ®å‹•å°æ•°ç‚¹åˆè¨ˆã¯æ£ç¢ºã§ã¯ãªã„ãŸã‚ã€ä¸Šè¨˜ã‚³ãƒ¼ãƒ‰ã¯ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒè¡Œã†åˆè¨ˆè¨ˆç®—ã¨å¿…ãšã—ã‚‚åŒç‰ã«ãªã‚Šã¾ã›ã‚“。return reduce(0, Double::sum);æµ®å‹•å°æ•°ç‚¹åˆè¨ˆã®å€¤ã¯ã€å…¥åЛ値ã¨åŠ ç®—æ“ä½œé †åºã®ä¸¡æ–¹ã®é–¢æ•°ã«ãªã‚Šã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®åŠ ç®—æ“作ã®é †åºã¯æ„å›³çš„ã«æœªå®šç¾©ã«ãªã£ã¦ã„ã¾ã™ãŒã€ãれã¯ã€å®Ÿè£…ãŒè¨ˆç®—çµæžœã®é€Ÿåº¦ã‚„ç²¾åº¦ã‚’æŸ”è»Ÿã«æ”¹å–„ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã§ã™ã€‚ 特ã«ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’補æ£åŠ ç®—ãªã©ã®ãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã‚’使ã£ã¦å®Ÿè£…ã™ã‚Œã°ã€
double値ã®å˜ç´”ãªåˆè¨ˆã«æ¯”ã¹ã€æ•°å€¤åˆè¨ˆã®èª¤ã‚Šé™ç•Œã‚’減らã›ã¾ã™ã€‚ 演算ã®é †åºã¨ã€ç•°ãªã‚‹åˆè¨ˆã‚¹ã‚ームを使用ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®å‡ºåŠ›ã¯åŒã˜å…¥åŠ›è¦ç´ ã«ã‚ˆã£ã¦ç•°ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚æ§˜ã€…ãªæ¡ä»¶ã«ã‚ˆã£ã¦ã€ç„¡é™ã®åˆè¨ˆãŒè¨ˆç®—ã•ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ ã“れã¯ã€åˆè¨ˆã•れるã™ã¹ã¦ã®è¦ç´ ãŒæœ‰é™ã§ã‚ã£ã¦ã‚‚発生ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ã„ãšã‚Œã‹ã®è¦ç´ ãŒç„¡é™ã®å ´åˆã€åˆè¨ˆã¯ç„¡é™ã«ãªã‚Šã¾ã™:
- ã„ãšã‚Œã‹ã®è¦ç´ ãŒNaNã®å ´åˆã€æœ€å¾Œã®åˆè¨ˆã¯NaNã«ãªã‚Šã¾ã™ã€‚
- è¦ç´ ã«1ã¤ä»¥ä¸Šã®ç„¡é™å¤§ãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã€åˆè¨ˆã¯ç„¡é™ã¾ãŸã¯NaNã«ãªã‚Šã¾ã™ã€‚
- è¦ç´ ã«é€†ç¬¦å·ã®ç„¡é™å¤§ãŒå«ã¾ã‚Œã¦ã„ã‚‹å ´åˆã€åˆè¨ˆã¯NaNã«ãªã‚Šã¾ã™ã€‚
- è¦ç´ ã«1ã¤ã®ç¬¦å·ã®ç„¡é™å¤§ãŒå«ã¾ã‚Œã€ä¸é–“åˆè¨ˆãŒå対符å·ã®ç„¡é™å¤§ã«ã‚ªãƒ¼ãƒãƒ¼ãƒ•ãƒãƒ¼ã™ã‚‹å ´åˆã€åˆè¨ˆã¯NaNã«ãªã‚Šã¾ã™ã€‚
ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- è¦ç´ ãŒçµ¶å¯¾å€¤ã®æ˜‡é †ã«ã‚½ãƒ¼ãƒˆã•れã¦ã„ã‚‹ã¨ã€ç”Ÿæˆã•ã‚Œã‚‹çµæžœã®ç²¾åº¦ãŒé«˜ã¾ã‚‹å‚¾å‘ãŒã‚りã¾ã™ã€‚
- 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®åˆè¨ˆ
-
min
OptionalDouble min()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€å°è¦ç´ を記述ã™ã‚‹OptionalDoubleã¾ãŸã¯ç©ºã®OptionalDouble(ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒç©ºã®å ´åˆ)ã‚’è¿”ã—ã¾ã™ã€‚ ã„ãšã‚Œã‹ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ è¦ç´ ãŒNaNã®å ´åˆã€æœ€å°è¦ç´ ã¯Double.NaNã«ãªã‚Šã¾ã™ã€‚ 数値比較演算åã¨ã¯ç•°ãªã‚Šã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯è² ã®ã‚¼ãƒãŒå޳坆ã«ã¯æ£ã®ã‚¼ãƒã‚ˆã‚Šã‚‚å°ã•ã„ã¨è¦‹ãªã—ã¾ã™ã€‚ ã“れã¯ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã®ç‰¹æ®Šãªå ´åˆã§ã‚ã‚Šã€æ¬¡ã¨åŒç‰ã«ãªã‚Šã¾ã™ã€‚return reduce(Double::min);ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€å°è¦ç´ ã‚’å«ã‚€
OptionalDoubleã¾ãŸã¯ç©ºã®Optional (ストリームãŒç©ºã®å ´åˆ)
-
max
OptionalDouble max()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€å¤§è¦ç´ を記述ã™ã‚‹OptionalDoubleã¾ãŸã¯ç©ºã®OptionalDouble(ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒç©ºã®å ´åˆ)ã‚’è¿”ã—ã¾ã™ã€‚ ã„ãšã‚Œã‹ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ è¦ç´ ãŒNaNã®å ´åˆã€æœ€å¤§è¦ç´ ã¯Double.NaNã«ãªã‚Šã¾ã™ã€‚ 数値比較演算åã¨ã¯ç•°ãªã‚Šã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯è² ã®ã‚¼ãƒãŒå޳坆ã«ã¯æ£ã®ã‚¼ãƒã‚ˆã‚Šã‚‚å°ã•ã„ã¨è¦‹ãªã—ã¾ã™ã€‚ ã“れã¯ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã®ç‰¹æ®Šãªå ´åˆã§ã‚ã‚Šã€æ¬¡ã¨åŒç‰ã«ãªã‚Šã¾ã™ã€‚return reduce(Double::max);ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€å¤§è¦ç´ ã‚’å«ã‚€
OptionalDoubleã¾ãŸã¯ç©ºã®Optional (ストリームãŒç©ºã®å ´åˆ)
-
count
long count()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®å€‹æ•°ã‚’è¿”ã—ã¾ã™ã€‚ ã“れã¯ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã®ç‰¹æ®Šãªå ´åˆã§ã‚ã‚Šã€æ¬¡ã¨åŒç‰ã«ãªã‚Šã¾ã™ã€‚return mapToLong(e -> 1L).sum();ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- 実装ã§ã¯ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ・ソースã‹ã‚‰ç›´æŽ¥ã‚«ã‚¦ãƒ³ãƒˆã‚’計算ã§ãã‚‹å ´åˆã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ・パイプライン(連続的ã¾ãŸã¯ä¸¦åˆ—çš„ã«)を実行ã—ãªã„ã“ã¨ã‚’é¸æŠžã§ãã¾ã™ã€‚ ãã®ã‚ˆã†ãªå ´åˆã€ã‚½ãƒ¼ã‚¹è¦ç´ ã¯ãƒˆãƒ©ãƒãƒ¼ã‚¹ã•れãšã€ä¸é–“æ“作ã¯è©•価ã•れã¾ã›ã‚“。 デãƒãƒƒã‚°ãªã©ã®ç„¡å®³ãªã‚±ãƒ¼ã‚¹ã‚’除ãã€å‰¯ä½œç”¨ã®ã‚る行動パラメータãŒå¼·ã推奨ã•れãªã„å ´åˆãŒã‚りã¾ã™ã€‚ ãŸã¨ãˆã°ã€æ¬¡ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«ã¤ã„ã¦è€ƒãˆã¦ã¿ã¾ã™:
ストリーム・ソースã§ã‚«ãƒãƒ¼ã•れるè¦ç´ ã®æ•°ãŒã‚ã‹ã£ã¦ãŠã‚Šã€ä¸é–“æ“作ã§ã‚ã‚‹DoubleStream s = DoubleStream.of(1, 2, 3, 4); long count = s.peek(System.out::println).count();peekã¯ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ (flatMapã¾ãŸã¯filteræ“作ã®å ´åˆã®ã‚ˆã†ã«)ã«è¦ç´ を注入ã¾ãŸã¯å‰Šé™¤ã—ã¾ã›ã‚“。 ã—ãŸãŒã£ã¦ã€ã‚«ã‚¦ãƒ³ãƒˆã¯4ã§ã€ãƒ‘イプラインを実行ã™ã‚‹å¿…è¦ã¯ãªãã€å‰¯ä½œç”¨ã¨ã—ã¦è¦ç´ を出力ã—ã¾ã™ã€‚ - 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®å€‹æ•°
-
average
OptionalDouble average()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã®ç®—è¡“å¹³å‡ã‚’記述ã™ã‚‹OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒç©ºã®å ´åˆã¯ç©ºã®Optionalã‚’è¿”ã—ã¾ã™ã€‚計算ã•れãŸå¹³å‡ã¯æ•°å€¤çš„ã«å¤‰åŒ–ã—ã€åˆè¨ˆã®è¨ˆç®—ã¨ã—ã¦ç‰¹æ®Šãªã‚±ãƒ¼ã‚¹å‹•作をæŒã¤å ´åˆãŒã‚りã¾ã™ã€‚詳細ã¯ã€
sum()ã‚’å‚ç…§ã—ã¦ãã ã•ã„。平å‡ã¯ã€ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã®ç‰¹æ®Šãªå ´åˆã§ã™ã€‚
ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- è¦ç´ ãŒçµ¶å¯¾å€¤ã®æ˜‡é †ã«ã‚½ãƒ¼ãƒˆã•れã¦ã„ã‚‹ã¨ã€ç”Ÿæˆã•ã‚Œã‚‹çµæžœã®ç²¾åº¦ãŒé«˜ã¾ã‚‹å‚¾å‘ãŒã‚りã¾ã™ã€‚
- 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å¹³å‡è¦ç´ ã‚’å«ã‚€
OptionalDoubleã¾ãŸã¯ç©ºã®ã‚ªãƒ—ション(ストリームãŒç©ºã®å ´åˆ)
-
summaryStatistics
DoubleSummaryStatistics summaryStatistics()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«é–¢ã™ã‚‹å„種ã®ã‚µãƒžãƒªãƒ¼ãƒ»ãƒ‡ãƒ¼ã‚¿ã‚’記述ã™ã‚‹DoubleSummaryStatisticsã‚’è¿”ã—ã¾ã™ã€‚ ã“れã¯ãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã®ç‰¹æ®Šãªå ´åˆã§ã™ã€‚ã“れã¯çµ‚端æ“作ã§ã™ã€‚
- 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«é–¢ã™ã‚‹å„種ã®ã‚µãƒžãƒªãƒ¼ãƒ»ãƒ‡ãƒ¼ã‚¿ã‚’記述ã™ã‚‹
DoubleSummaryStatistics
-
anyMatch
boolean anyMatch(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã„ãšã‚Œã‹ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚ ã™ã¹ã¦ã®è¦ç´ ã§è¿°èªžã‚’評価ã™ã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“(çµæžœã‚’決定ã™ã‚‹ã®ã«å¿…è¦ã§ãªã„å ´åˆ)。 ストリームãŒç©ºã®å ´åˆã€falseãŒè¿”ã•れã€è¿°èªžã¯è©•価ã•れã¾ã›ã‚“。ã“れã¯çŸçµ¡çµ‚端æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã™ã‚‹è¿°èªžã®å˜åœ¨é‡åŒ–(ã‚ã‚‹xã«ã¤ã„ã¦P(x))を評価ã—ã¾ã™ã€‚
- パラメータ:
predicate- ストリームã®è¦ç´ ã«é©ç”¨ã™ã‚‹éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªè¿°èªž- 戻り値:
- 指定ã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹è¦ç´ ãŒã‚¹ãƒˆãƒªãƒ¼ãƒ 内ã«å˜åœ¨ã™ã‚‹å ´åˆã¯
trueã€ãã†ã§ãªã„å ´åˆã¯false
-
allMatch
boolean allMatch(DoublePredicate predicate) ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã™ã¹ã¦ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚ ã™ã¹ã¦ã®è¦ç´ ã§è¿°èªžã‚’評価ã™ã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“(çµæžœã‚’決定ã™ã‚‹ã®ã«å¿…è¦ã§ãªã„å ´åˆ)。 ストリームãŒç©ºã®å ´åˆã€trueãŒè¿”ã•れã€è¿°èªžã¯è©•価ã•れã¾ã›ã‚“。ã“れã¯çŸçµ¡çµ‚端æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã™ã‚‹è¿°èªžã®å…¨ç§°é‡åŒ–(ã™ã¹ã¦ã®xã«ã¤ã„ã¦P(x))を評価ã—ã¾ã™ã€‚ ストリームãŒç©ºã®å ´åˆã€é‡åŒ–ã¯ç„¡æ„å‘³ã«æº€ãŸã•れるã¨è¨€ã„ã€(P(x)ã¨ã¯ç„¡é–¢ä¿‚ã«)常ã«
trueã«ãªã‚Šã¾ã™ã€‚ - パラメータ:
predicate- ストリームã®è¦ç´ ã«é©ç”¨ã™ã‚‹éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªè¿°èªž- 戻り値:
- ストリームã®ã™ã¹ã¦ã®è¦ç´ ãŒæŒ‡å®šã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹ã‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒç©ºã®å ´åˆã¯
trueã€ãれ以外ã®å ´åˆã¯false
-
noneMatch
boolean noneMatch(DoublePredicate predicate) 指定ã•れãŸè¿°èªžã«ä¸€è‡´ã™ã‚‹è¦ç´ ãŒã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ 内ã«å˜åœ¨ã—ãªã„ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚ ã™ã¹ã¦ã®è¦ç´ ã§è¿°èªžã‚’評価ã™ã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“(çµæžœã‚’決定ã™ã‚‹ã®ã«å¿…è¦ã§ãªã„å ´åˆ)。 ストリームãŒç©ºã®å ´åˆã€trueãŒè¿”ã•れã€è¿°èªžã¯è©•価ã•れã¾ã›ã‚“。ã“れã¯çŸçµ¡çµ‚端æ“作ã§ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«å¯¾ã™ã‚‹è¿°èªžã®å¦å®šã®å…¨ç§°é‡åŒ–(ã™ã¹ã¦ã®xã«ã¤ã„ã¦~P(x))を評価ã—ã¾ã™ã€‚ ストリームãŒç©ºã®å ´åˆã€é‡åŒ–ã¯ç„¡æ„å‘³ã«æº€ãŸã•れるã¨è¨€ã„ã€P(x)ã¨ã¯ç„¡é–¢ä¿‚ã«å¸¸ã«
trueã«ãªã‚Šã¾ã™ã€‚ - パラメータ:
predicate- ストリームã®è¦ç´ ã«é©ç”¨ã™ã‚‹éžå¹²æ¸‰ã§ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ãªè¿°èªž- 戻り値:
- ストリームã®ã©ã®è¦ç´ も指定ã•れãŸè¿°èªžã«ä¸€è‡´ã—ãªã„ã‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒç©ºã®å ´åˆã¯
trueã€ãれ以外ã®å ´åˆã¯false
-
findFirst
OptionalDouble findFirst()ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€åˆã®è¦ç´ を記述ã™ã‚‹OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ストリームãŒç©ºã®å ´åˆã¯ç©ºã®OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒæ¤œå‡ºé †åºã‚’æŒãŸãªã„å ´åˆã¯ã€ä»»æ„ã®è¦ç´ ãŒè¿”ã•れã¾ã™ã€‚ã“れã¯çŸçµ¡çµ‚端æ“作ã§ã™ã€‚
- 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æœ€åˆã®è¦ç´ を記述ã™ã‚‹
OptionalDoubleã¾ãŸã¯ç©ºã®OptionalDouble(ストリームãŒç©ºã®å ´åˆ)
-
findAny
OptionalDouble findAny()ストリームã®ä¸€éƒ¨ã®è¦ç´ を記述ã™ã‚‹OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ストリームãŒç©ºã®å ´åˆã¯ç©ºã®OptionalDoubleã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯çŸçµ¡çµ‚端æ“作ã§ã™ã€‚
ã“ã®æ“作ã®å‹•ä½œã¯æ˜Žã‚‰ã‹ã«éžæ±ºå®šè«–çš„ã§ã™ã€‚ストリームã®ä»»æ„ã®è¦ç´ を自由ã«é¸æŠžã§ãã¾ã™ã€‚ ã“れã¯ã€ä¸¦åˆ—処ç†ã§ã®ãƒ‘フォーマンスを最大化ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã§ã™ã€‚デメリットã¯ã€åŒã˜ã‚½ãƒ¼ã‚¹ã«å¯¾ã—ã¦å‘¼ã³å‡ºã™ãŸã³ã«ã€é•ã†çµæžœãŒè¿”ã•れるå¯èƒ½æ€§ãŒã‚る点ã§ã™ã€‚ (安定ã—ãŸçµæžœãŒå¿…è¦ãªå ´åˆã¯ã€ã‹ã‚りã«
findFirst()を使用ã—ã¦ãã ã•ã„。)- 戻り値:
- ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã‚ã‚‹è¦ç´ を記述ã™ã‚‹
OptionalDoubleã¾ãŸã¯ç©ºã®OptionalDouble(ストリームãŒç©ºã®å ´åˆ) - é–¢é€£é …ç›®:
-
boxed
ã“ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å„è¦ç´ ã‚’Doubleã«ãƒœã‚¯ã‚·ãƒ³ã‚°ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるStreamã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ä¸é–“æ“作ã§ã™ã€‚
- 戻り値:
- ストリームã®å„è¦ç´ ã‚’
Doubleã«ãƒœã‚¯ã‚·ãƒ³ã‚°ã—ãŸçµæžœã‹ã‚‰æ§‹æˆã•れるStream
-
builder
static DoubleStream.Builder builder()DoubleStreamã®ãƒ“ルダーを返ã—ã¾ã™ã€‚- 戻り値:
- ストリーム・ビルダー
-
empty
static DoubleStream empty()空ã®é †æ¬¡DoubleStreamã‚’è¿”ã—ã¾ã™ã€‚- 戻り値:
- 空ã®é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ
-
of
static DoubleStream of(double t) å˜ä¸€è¦ç´ ã‚’å«ã‚€é †æ¬¡DoubleStreamã‚’è¿”ã—ã¾ã™ã€‚- パラメータ:
t- å˜ä¸€è¦ç´- 戻り値:
- å˜ä¸€è¦ç´ ã®é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ
-
of
static DoubleStream of(double... values) 指定ã•れãŸå€¤ã‚’è¦ç´ ã«æŒã¤ã€é †åºä»˜ã‘ã•れãŸé †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã—ã¾ã™ã€‚- パラメータ:
values- æ–°ã—ã„ストリームã®è¦ç´- 戻り値:
- æ–°ã—ã„ストリーãƒ
-
iterate
static DoubleStream iterate(double seed, DoubleUnaryOperator f) åˆæœŸè¦ç´seedã«é–¢æ•°fを繰り返ã—é©ç”¨ã™ã‚‹ã“ã¨ã§ç”Ÿæˆã•れるã€é †åºä»˜ã‘ã•れãŸç„¡é™é †æ¬¡DoubleStreamã‚’è¿”ã—ã¾ã™(seedã€f(seed)ã€f(f(seed))ã€ã¨ã„ã£ãŸè¦ç´ ã‹ã‚‰æˆã‚‹StreamãŒç”Ÿæˆã•れる)。DoubleStreamã®æœ€åˆã®è¦ç´ (ä½ç½®0)ã¯ã€æŒ‡å®šã•れãŸseedã«ãªã‚Šã¾ã™ã€‚n > 0ã®å ´åˆã€ä½ç½®nã®è¦ç´ ã¯ã€ä½ç½®n - 1ã®è¦ç´ ã«é–¢æ•°fã‚’é©ç”¨ã—ãŸçµæžœã«ãªã‚Šã¾ã™ã€‚1ã¤ã®è¦ç´ happens-beforeã«
fã‚’é©ç”¨ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³(後続ã®è¦ç´ ã«fã‚’é©ç”¨ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³)。 ã©ã®è¦ç´ ã«å¯¾ã—ã¦ã‚‚ã€ãƒ©ã‚¤ãƒ–ラリãŒé¸æŠžã™ã‚‹ã©ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã‚‚アクションを実行ã§ãã¾ã™ã€‚- パラメータ:
seed- åˆæœŸè¦ç´f- æ–°ã—ã„è¦ç´ を生æˆã™ã‚‹ãŸã‚ã«å‰ã®è¦ç´ ã«é©ç”¨ã•れる関数- 戻り値:
- æ–°ã—ã„é †æ¬¡
DoubleStream
-
iterate
static DoubleStream iterate(double seed, DoublePredicate hasNext, DoubleUnaryOperator next) 指定ã•れãŸnextファンクションã®å復é©ç”¨ã«ã‚ˆã£ã¦ç”Ÿæˆã•れãŸé †æ¬¡é †åºä»˜ã‘ã•れãŸDoubleStreamã‚’ã€æŒ‡å®šã•れãŸhasNext述語を満ãŸã™æ¡ä»¶ä»˜ãåˆæœŸè¦ç´ ã«æˆ»ã—ã¾ã™ã€‚ ストリームã¯ã€hasNext述語ãŒfalseã‚’è¿”ã™ã¨ã™ãã«çµ‚了ã—ã¾ã™ã€‚DoubleStream.iterateã¯ã€å¯¾å¿œã™ã‚‹forループã«ã‚ˆã£ã¦ç”Ÿæˆã•れるもã®ã¨åŒã˜ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’生æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™:for (double index=seed; hasNext.test(index); index = next.applyAsDouble(index)) { ... }hasNext述語ãŒã‚·ãƒ¼ãƒ‰å€¤ã‚’ä¿æŒã—ãªã„å ´åˆã€çµæžœã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã¯ç©ºã«ãªã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ ãれ以外ã®å ´åˆã€æœ€åˆã®è¦ç´ ãŒæŒ‡å®šã®seed値ã«ãªã‚Šã€æ¬¡ã®è¦ç´ (å˜åœ¨ã™ã‚‹å ´åˆ)ã¯ã€next関数をseed値ã«é©ç”¨ã—ãŸçµæžœã«ãªã‚Šã¾ã™ã€‚ã¾ãŸã€hasNext述語ãŒã‚¹ãƒˆãƒªãƒ¼ãƒ を終了ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’示ã™ã¾ã§å復的ã«è¡Œã‚れã¾ã™ã€‚hasNext述語をè¦ç´ happens-beforeã«é©ç”¨ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³(ãã®è¦ç´ ã«next関数をé©ç”¨ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³)。 1ã¤ã®è¦ç´ happens-beforeã«next関数をé©ç”¨ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³(後続ã®è¦ç´ ã«hasNext述語をé©ç”¨ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³)。 ã©ã®è¦ç´ ã«å¯¾ã—ã¦ã‚‚ã€ãƒ©ã‚¤ãƒ–ラリãŒé¸æŠžã™ã‚‹ã©ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã‚‚アクションを実行ã§ãã¾ã™ã€‚- パラメータ:
seed- åˆæœŸè¦ç´hasNext- ストリームを終了ã™ã‚‹å¿…è¦ãŒã‚るタイミングを決定ã™ã‚‹ãŸã‚ã«è¦ç´ ã«é©ç”¨ã™ã‚‹è¿°èªžã€‚next- æ–°ã—ã„è¦ç´ を生æˆã™ã‚‹ãŸã‚ã«å‰ã®è¦ç´ ã«é©ç”¨ã•れる関数- 戻り値:
- æ–°ã—ã„é †æ¬¡
DoubleStream - å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
- 9
-
generate
static DoubleStream generate(DoubleSupplier s) 指定ã•れãŸDoubleSupplierã«ã‚ˆã£ã¦ç”Ÿæˆã•れるè¦ç´ ã‚’å«ã‚€ã€é †åºä»˜ã‘ã•れã¦ã„ãªã„ç„¡é™é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’è¿”ã—ã¾ã™ã€‚ ã“れã¯ã€å®šæ•°ã‚¹ãƒˆãƒªãƒ¼ãƒ やランダムãªè¦ç´ ã‹ã‚‰æˆã‚‹ã‚¹ãƒˆãƒªãƒ¼ãƒ ãªã©ã‚’生æˆã™ã‚‹ã®ã«é©ã—ã¦ã„ã¾ã™ã€‚- パラメータ:
s- è¦ç´ を生æˆã™ã‚‹ãŸã‚ã®DoubleSupplier- 戻り値:
- é †åºä»˜ã‘ã•れã¦ã„ãªã„æ–°ã—ã„ç„¡é™é †æ¬¡
DoubleStream
-
concat
static DoubleStream concat(DoubleStream a, DoubleStream b) 最åˆã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å…¨è¦ç´ ã¨2番目ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®å…¨è¦ç´ を連çµã—ãŸã‚‚ã®ã‚’è¦ç´ ã«æŒã¤ã€é…延連çµã‚¹ãƒˆãƒªãƒ¼ãƒ を作æˆã—ã¾ã™ã€‚ çµæžœã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒé †åºä»˜ã‘ã•れるã®ã¯ã€å…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒã©ã¡ã‚‰ã‚‚é †åºä»˜ã‘ã•れã¦ã„ã‚‹å ´åˆã§ã‚りã€ä¸¦åˆ—çš„ã«ãªã‚‹ã®ã¯ã€å…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã©ã¡ã‚‰ã‹ãŒä¸¦åˆ—çš„ãªå ´åˆã§ã™ã€‚ çµæžœã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã‚¯ãƒãƒ¼ã‚ºæ™‚ã«ã¯ã€ä¸¡æ–¹ã®å…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã‚¯ãƒãƒ¼ã‚ºãƒ»ãƒãƒ³ãƒ‰ãƒ©ãŒå‘¼ã³å‡ºã•れã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯2ã¤ã®å…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã§å‹•作ã—ã€å„ストリームをãã®ã‚½ãƒ¼ã‚¹ã«ãƒã‚¤ãƒ³ãƒ‰ã—ã¾ã™ã€‚ ãã®çµæžœã€å…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ãƒ»ã‚½ãƒ¼ã‚¹ã¸ã®ãã®å¾Œã®å¤‰æ›´ã¯ã€é€£çµã‚¹ãƒˆãƒªãƒ¼ãƒ çµæžœã«åæ˜ ã•れãªã„ã“ã¨ãŒã‚りã¾ã™ã€‚
- APIã®ãƒŽãƒ¼ãƒˆ:
- 最é©åŒ–ã®æ©Ÿä¼šã‚’ä¿æŒã™ã‚‹ãŸã‚ã«ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å„ストリームをãã®ã‚½ãƒ¼ã‚¹ã«ãƒã‚¤ãƒ³ãƒ‰ã—ã€ãƒ‘ラメータã¨ã—ã¦2ã¤ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã¿ã‚’å—ã‘入れã¾ã™ã€‚ 例ãˆã°ã€å„å…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ãƒ»ã‚½ãƒ¼ã‚¹ã®æ£ç¢ºãªã‚µã‚¤ã‚ºãŒåˆ†ã‹ã£ã¦ã„ã‚‹å ´åˆã€é€£çµã‚¹ãƒˆãƒªãƒ¼ãƒ ãƒ»ã‚½ãƒ¼ã‚¹ã®æ£ç¢ºãªã‚µã‚¤ã‚ºã‚’計算ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãªã—ã§ã‚¹ãƒˆãƒªãƒ¼ãƒ を連çµã™ã‚‹å ´åˆã€ã¾ãŸã¯ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¸ã®ãƒã‚¹ãƒˆã•れãŸå‘¼ã³å‡ºã—を行ã‚ãªã„å ´åˆã¯ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ を作æˆã—ã€ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£é–¢æ•°ã‚’使用ã—ã¦ãƒ•ラット・マッピングã—ã¦ã¿ã¦ãã ã•ã„:
DoubleStream concat = Stream.of(s1, s2, s3, s4).flatMapToDouble(s -> s); - 実装上ã®ãƒŽãƒ¼ãƒˆ:
- 連çµã‚’繰り返ã™ã“ã¨ã§ã‚¹ãƒˆãƒªãƒ¼ãƒ を構築ã™ã‚‹éš›ã«ã¯æ³¨æ„ãŒå¿…è¦ã§ã™ã€‚ æ·±ã連çµã•れãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ã®è¦ç´ ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨ã€ãƒ‡ã‚£ãƒ¼ãƒ—・コール・ãƒã‚§ãƒ¼ãƒ³ã¾ãŸã¯
StackOverflowErrorãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ - パラメータ:
a- 最åˆã®ã‚¹ãƒˆãƒªãƒ¼ãƒb- 2番目ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ- 戻り値:
- 2ã¤ã®å…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’é€£çµã—ãŸã‚‚ã®
-