{"id":1561,"date":"2024-09-13T10:20:23","date_gmt":"2024-09-13T01:20:23","guid":{"rendered":"https:\/\/skanto.co.kr\/?p=1561"},"modified":"2024-09-15T15:20:21","modified_gmt":"2024-09-15T06:20:21","slug":"java-stream-api-mastering-reduction-operations","status":"publish","type":"post","link":"https:\/\/skanto.co.kr\/?p=1561","title":{"rendered":"Java Stream API: Mastering Reduction Operations"},"content":{"rendered":"\n<p>Java\uc5d0\uc11c Stream\uc744 \ub2e4\ub8e8\ub2e4 \ubcf4\uba74 stream\uc5d0 \uc788\ub294 \uac12\ub4e4\uc744 \ud558\ub098\uc758 \uacb0\uacfc \uac12\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \uc791\uc5c5\ub4e4\uc774 \ud754\ud788 \ubc1c\uc0dd\ud55c\ub2e4. stream\uc744 \ud558\ub098\uc758 \uac12\uc73c\ub85c reducing\ud558\uac70\ub098 \ubaa8\ub4e0 \uac12\uc744 \ub354\ud574 \ud558\ub098\uc758 \uac12\uc73c\ub85c \ucde8\ud569\ud558\ub294 \uc791\uc5c5\ub4e4\uc774 \uc5ec\uae30\uc5d0 \ud574\ub2f9\ud55c\ub2e4. Java Stream API\ub294 \uc774\ub7f0 \uc77c\ub828\uc758 \uc791\uc5c5\ub4e4\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ud560 \uc218 \uc788\ub3c4\ub85d \uc9c1\uad00\uc801\uc774\uba74\uc11c \uac15\ub825\ud55c \ud234\uc744 \uc81c\uacf5\ud55c\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 \ucf54\ub4dc\ub97c \uae54\ub054\ud558\uac8c \ud558\uace0 \uc6d0\ud558\ub294 \uc131\uacfc\ub97c \ub2ec\uc131\ud560 \uc218 \uc788\ub3c4\ub85d \uc774\ub7f0 operation\ub4e4\uc758 \ud65c\uc6a9 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf8\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:720\/format:webp\/1*kmYJfDU7BSKWrIaRXm0onA.jpeg\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>\uc55e\uc73c\ub85c \ub2e4\ub8e8\uac8c \ub420 \ubaa8\ub4e0 Operation\ub4e4\uc740 Terminal Operation\uc774\ub77c\uace0 \ud558\uba70 Stream\uc744 \uac00\uacf5\ud574\uc11c \ubc18\ud658\ub420 \uac12\uc73c\ub85c \ubcc0\ud615\ud55c \ub2e4\uc74c Stream\uc744 Close\ud55c\ub2e4\ub294 \uc758\ubbf8\ub97c \uac16\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">count method<\/h3>\n\n\n\n<p>Stream\uc5d0\uc11c \ucc98\ub9ac\ud558\ub294 Element\uc758 \uac1c\uc218\ub97c \uc54c\uace0 \uc2f6\uc744 \ub54c count method\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>long count();<\/code><\/pre>\n\n\n\n<p>\uc0ac\uc6a9\ubc95\uc740 \uc544\ub798\uc640 \uac19\uc774 \ub9e4\uc6b0 \uc9c1\uad00\uc801\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>long example1 = Stream.of(1, 2, 3).count();\n\/\/ 3<\/code><\/pre>\n\n\n\n<p>count() method\ub294 \ucd08\uae30 Stream\uc5d0 \uc18d\ud55c \ucd1d Element\uac1c\uc218\uac00 \uc544\ub2c8\ub77c \uc911\uac04 \ub2e8\uacc4\uc758 \ubaa8\ub4e0 Operation\uc774 \uc885\ub8cc\ub41c \uc774\ud6c4\uc758 \ucd5c\uc885 Element \uac1c\uc218\ub97c \ubc18\ud658\ud55c\ub2e4. \uc544\ub798 \uc0d8\ud50c\uc5d0\uc11c count() method\ub294 filter() Operation \uc774\ud6c4\uc5d0 \ud638\ucd9c\ub41c\ub2e4. \uc5ec\uae30\uc11c filter() method\ub294 \ud55c \uac1c\uc758 Element\ub97c \uc81c\uc678\uc2dc\ud0a4\ubbc0\ub85c \ucd5c\uc885 \uacb0\uacfc\ub294 3\uc774 \uc544\ub2c8\ub77c 2\uac00 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>long example2 = Stream.of(1, 2, 3)\n        .filter(n -&gt; n != 1)\n        .count();\n\/\/ 2<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">min method<\/h3>\n\n\n\n<p>Stream\uc5d0\uc11c \ucd5c\uc18c\uac12\uc744 \uac16\ub294 Element\ub97c \ucc3e\uae30 \uc704\ud574 \uc544\ub798\uc758 method\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;T&gt; min(Comparator&lt;? super T&gt; comparator);<\/code><\/pre>\n\n\n\n<p>\uc774 method\ub294 \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\ub294 Comparator\ub97c \ud65c\uc6a9\ud558\uc5ec \ucd5c\uc18c\uac12\uc744 \uacb0\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;Integer&gt; example4 = Stream.of(1, 2, 3)\n        .min(Integer::compare);\n\/\/ Optional&#91;1]<\/code><\/pre>\n\n\n\n<p>\uacb0\uacfc\uac12\uc740 \ubc14\ub85c \ubc18\ud658\ub418\ub294 \uac83\uc774 \uc544\ub2c8\ub77c Optional \uac1d\uccb4\ub85c \uac10\uc2f8\uc5ec\uc9c4 \uc0c1\ud0dc\ub85c \ubc18\ud658\ub41c\ub2e4. \ub530\ub77c\uc11c, \ube48(empty) Stream\uc744 \uc0c1\ub300\ub85c \ud638\ucd9c\ud55c\ub2e4\uba74 \uacb0\uacfc\ub294 \ube48 Optional\uc774 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;Integer&gt; example5 = Stream.&lt;Integer&gt;empty()\n        .min(Integer::compare);\n\/\/ Optional.empty<\/code><\/pre>\n\n\n\n<p>\ub610 \ub2e4\ub978 \ud765\ubbf8\ub85c\uc6b4 \uc0d8\ud50c\ub85c LocalDate \uac1d\uccb4\ub4e4\ub85c \uc774\ub8e8\uc5b4\uc9c4 Stream\uc5d0 \uc774 method\ub97c \uc801\uc6a9\ud574 \ubcf4\ub294 \uac83\uc774\ub2e4. LocalDate\ub294 Comparator\ub97c implement\ud558\uc9c0 \uc54a\uc9c0\ub9cc LocalDate\ub97c epoch day(long)\uc73c\ub85c \ubcc0\ud658 \ud6c4 \uac12\uc744 \ube44\uad50\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \uc774\uc288\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;LocalDate&gt; example6 = Stream.of(\n                LocalDate.of(2024, 8, 25),\n                LocalDate.of(2024, 8, 26))\n        .min(Comparator.comparing(LocalDate::toEpochDay));\n\/\/ Optional&#91;2024-08-25]<\/code><\/pre>\n\n\n\n<p>\uc774 \uc0d8\ud50c\uc740 \uc544\ub798\uc640 \uac19\uc774 \ub2e8\uc21c\ud654 \uc2dc\ud0ac \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;LocalDate&gt; example7 = Stream.of(\n                LocalDate.of(2024, 8, 25),\n                LocalDate.of(2024, 8, 26))\n        .min(Comparator.naturalOrder());\n\/\/ Optional&#91;2024-08-25]<\/code><\/pre>\n\n\n\n<p>Numeric stream \uc778\ud130\ud398\uc774\uc2a4\ub294 \uc720\uc0ac\ud55c method\ub97c \uc9c0\uc6d0\ud558\uc9c0\ub9cc Element \ud0c0\uc785\uc744 \uc720\ucd94\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \ud30c\ub77c\ubbf8\ud130\ub97c \uc9c0\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub41c\ub2e4. \ucd94\uac00\uc801\uc73c\ub85c \uc774\ub4dc\ub974 \uba54\uc18c\ub4dc\ub294 Stream \ud0c0\uc785\uc5d0 \ub300\uc751\ud558\ub294 Optional \uac1d\uccb4\ub97c \ubc18\ud658\ud55c\ub2e4. \uc989, IntStream\uc77c \uacbd\uc6b0 OptionalInt, LongStream\uc77c \uacbd\uc6b0 OptionalLong \ub4f1..<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OptionalInt example8 = IntStream.of(1, 2, 3)\n        .min();\n\/\/ OptionalInt&#91;1]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">max method<\/h3>\n\n\n\n<p>max method\ub294 min method\uc624 \ub300\ucc99\uc810\uc5d0 \uc788\ub2e4. \uc989, \ud30c\ub77c\ubbf8\ud130\ub85c \uc8fc\uc5b4\uc9c0\ub294 <code>Comparator<\/code>\ub97c \ud65c\uc6a9\ud558\uc5ec \ucd5c\ub300\uac12\uc744 \ubc18\ud658\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;T> max(Comparator&lt;? super T> comparator);<\/code><\/pre>\n\n\n\n<p>\uc544\ub798\ub294 \ud65c\uc6a9 \uc0d8\ud50c\uc744 \ubcf4\uc5ec\uc900\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;Integer> example9 = Stream.of(1, 2, 3)\n        .max(Integer::compare);\n\/\/ Optional&#91;3]\n\nOptional&lt;Integer> example10 = Stream.&lt;Integer>empty()\n        .max(Integer::compare);\n\/\/ Optional.empty\n\nOptional&lt;LocalDate> example11 = Stream.of(\n                LocalDate.of(2024, 8, 25),\n                LocalDate.of(2024, 8, 26))\n        .max(Comparator.comparing(LocalDate::toEpochDay));\n\/\/ Optional&#91;2024-08-26]\n\nOptional&lt;LocalDate> example12 = Stream.of(\n                LocalDate.of(2024, 8, 25),\n                LocalDate.of(2024, 8, 26))\n        .max(Comparator.naturalOrder());\n\/\/ Optional&#91;2024-08-26]\n\nOptionalInt example13 = IntStream.of(1, 2, 3)\n        .max();\n\/\/ OptionalInt&#91;3]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">reduce method<\/h3>\n\n\n\n<p>Java Stream API\uc758 reduce method\ub294 terminal operation\uc73c\ub85c stream\uc758 \ubaa8\ub4e0 element\ub97c \uc5f0\uc0b0\ud574\uc11c \ud558\ub098\uc758 immutable value\ub85c \ub9cc\ub4e4\uc5b4\ub0b4\ub3c4\ub85d \ud55c\ub2e4. \uc774\ub294 \ubc18\ubcf5\uc801\uc73c\ub85c \uac01 element\uc5d0 binary \uc5f0\uc0b0\uc744 \uc801\uc6a9\ud558\uace0 \uadf8 \uacb0\uacfc \uac12\uc744 \ub204\uc801\ud574 \ub098\uac00\ub294 \ubc29\uc2dd\uc73c\ub85c \uc9c4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<p>Stream \uc778\ud130\ud398\uc774\uc2a4\ub294 3\uac00\uc9c0\uc758 overloading\ub41c reduce method\ub97c \uc81c\uacf5\ud55c\ub2e4. \uadf8\ub7fc \uccab \ubc88\uc9f8 \uac83\ubd80\ud130 \uc0b4\ud3b4\ubcf4\uc790<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;T> reduce(BinaryOperator&lt;T> accumulator);<\/code><\/pre>\n\n\n\n<p>\uc774 method\ub294 BinaryOperator\ub97c \uc804\ub2ec \ubc1b\uace0 Optional\uac1d\uccb4\ub97c \ubc18\ud658\ud55c\ub2e4. \uc608\ub97c \ub4e4\uba74, \uc544\ub798\uc640 \uac19\uc774 Stream\uc758 \ubaa8\ub4e0 Element\uc5d0 \ub300\ud55c \ud569\uacc4\ub97c \uc27d\uac8c \uad6c\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;Integer> example14 = Stream.of(0, 1, 2)\n        .reduce((a, b) -> a + b);\n\/\/ Optional&#91;3] (0 + 1 + 2 = 3)\n\/\/ I.  a(0) + b(1) = 1\n\/\/ II. a(1) + b(2) = 3<\/code><\/pre>\n\n\n\n<p>reduce \uc5f0\uc0b0\uacfc\uc815\uc744 \ubcf4\uba74<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Initial Step<\/strong>: Stream\uc758 \ucc98\uc74c Element 2\uac1c\uac00 <code>BinaryOperator<\/code> \ub85c \uc804\ub2ec\ub41c\ub2e4. \uc774\ub54c \uccab\ubc88\uc9f8 Element\ub294 a, \ub450\ubc88\uc9f8 Element\ub294 b\uac00 \ub41c\ub2e4. \uc774 \uc5f0\uc0b0\uc758 \uacb0\uacfc\ub294 \ub610\ub2e4\uc2dc \uc0c8\ub85c\uc6b4 a\uac00 \ub41c\ub2e4.<\/li>\n\n\n\n<li><strong>Subsequent Iterations<\/strong>: reduce \uc5f0\uc0b0\uc740 \uc774\uc804 \uc5f0\uc0b0\uc758 \uacb0\uacfc \uac12(a)\ub85c Stream\uc758 \ub2e4\uc74c Element\ub97c (b)\ub85c \ud574\uc11c \uc5f0\uc0b0\uc744 \uc774\uc5b4\uac04\ub2e4. \uc774 \uacfc\uc815\uc740 Stream\uc5d0 \ub0a8\uc544\uc788\ub294 \ubaa8\ub4e0 element\uc5d0 \ub300\ud574 \ubc18\ubcf5\uc801\uc73c\ub85c \uc801\uc6a9\ud574 \ub098\uac04\ub2e4.<\/li>\n\n\n\n<li><strong>Final Result<\/strong>: \ubaa8\ub4e0 Element\uac00 \ucc98\ub9ac\ub418\uace0 \ub098\uba74 \ucd5c\uc885\uc801\uc73c\ub85c \ub204\uc801\ub41c \uac12\uc774 Optional \uac12\uc73c\ub85c \ubc18\ud658\ud55c\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p>\ub9cc\uc57d Stream\uc774 \ube44\uc5b4(empty)\uc788\ub2e4\uba74 \uc774 method\ub294 \ud145\ube48(empty) Optional\uc744 \ubc18\ud658\ud55c\ub2e4. \ub530\ub77c\uc11c \uac12\uc744 \uc5bb\uc5b4\uc624\uae30 \uc804\uc5d0 <code>.isPresent()<\/code> method\ub97c \uc774\uc6a9\ud558\uc5ec \uac12\uc774 \uc874\uc7ac\uc5ec\ubd80\ub97c \uba3c\uc800 \ud655\uc778\ud558\ub294 \uac83\uc774 \uc88b\uc740 \ucf54\ub529\uc2b5\uad00\uc774\ub77c \ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Optional&lt;Integer> example15 = Stream.&lt;Integer>empty()\n        .reduce((a, b) -> a + b);\n\/\/ Optional.empty<\/code><\/pre>\n\n\n\n<p>\ub450 \ubc88\uc9f8 reduce method\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud615\ud0dc\ub97c \uac00\uc9c4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">T reduce(T identity, BinaryOperator&lt;T&gt; accumulator);<\/pre>\n\n\n\n<p><code>BinaryOperator<\/code>\uc5d0 \ub300\ud574 \ucd94\uac00\uc801\uc73c\ub85c <code>identity<\/code>\ub85c \ubd88\ub9ac\ub294 \ud30c\ub77c\ubbf8\ud130\ub97c \ucd94\uac00\uc801\uc73c\ub85c \ubc1b\ub294\ub2e4. \uc774\ub294 reduction\uacfc\uc815\uc5d0\uc11c\uc758 \ucd08\uae30\uac12\uc73c\ub85c \ud65c\uc6a9\ub418\uac70\ub098 Stream\uc774 \ube44\uc5b4\uc788\uc744 \uacbd\uc6b0 default \uac12\uc73c\ub85c \uc0ac\uc6a9\ub41c\ub2e4. \uc774\ub7f0 \ub3d9\uc791\uc73c\ub85c \uc778\ud574 \uc774 method\ub294 Optional\uc774 \uc544\ub2c8\ub77c \uac12\uc744 \uc9c1\uc811 \ubc18\ud658\ud558\ub294 \ud615\ud0dc\ub97c \uac00\uc9c4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Integer example16 = Stream.of( 1, 2, 3)\n        .reduce(10, (a, b) -> a + b);\n\/\/ 16 (10 + 1 + 2 + 3 = 16)\n\/\/ I.  a(10) + b(1) = 11\n\/\/ II. a(11) + b(2) = 13\n\/\/ II. a(13) + b(3) = 16\n\nInteger example17 = Stream.&lt;Integer>empty()\n        .reduce(10, (a, b) -> a + b);\n\/\/ 10<\/code><\/pre>\n\n\n\n<p>\uc704 \uc0d8\ud50c\uc5d0\uc11c identity\ub85c 10\uc744 \uc0ac\uc6a9\ud588\uae30 \ub54c\ubb38\uc5d0 reduce method\ub294 \uc2dc\uc791\ud560 \ub54c \uc774 \uac12\uc744 \uc801\uc6a9\ud55c\ub2e4. \ub9cc\uc57d Stream\uc774 \ube44\uc5b4\uc788\ub2e4\uba74 10\uc744 \uae30\ubcf8 \uac12\uc73c\ub85c \ubc18\ud658\ud55c\ub2e4.<\/p>\n\n\n\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc124\uba85\ud560 reduce method\ub294 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;U> U reduce(U identity,\n             BiFunction&lt;U, ? super T, U> accumulator,\n             BinaryOperator&lt;U> combiner);<\/code><\/pre>\n\n\n\n<p>\uc774 method\ub294 \ucd94\uac00\uc801\uc73c\ub85c <code>combiner<\/code>\ub77c \ubd88\ub9ac\ub294 <code>BinaryOperator<\/code>\ub97c \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\ub294\ub2e4. combiner\ub294 Stream\uc774 \ubcd1\ub82c\ub85c \ucc98\ub9ac\ub420 \ub54c \ubd80\ubd84 \uacb0\uacfc\uac12\uc744 \ucde8\ud569\ud558\ub294\ub370 \uc911\uc694\ud55c \uc5ed\ud560\uc744 \uc218\ud589\ud55c\ub2e4. \ubcd1\ub82c Stream\uc5d0\uc11c reduction \uc5f0\uc0b0\uc740 subtask\ub4e4\ub85c \ubd84\ud560\ub418\uba70 \uc774\ub4e4 subtask\ub4e4\uc740 \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ub41c\ub2e4. \uac01\uac01\uc758 subtask\ub4e4\uc740 \ubd80\ubd84 \uacb0\uacfc\ub97c \ub3c4\ucd9c\ud558\uba70 combiner function\uc740 \uc774\ub4e4 \ubd80\ubd84 \uacb0\uacfc\uac12\uc744 \ucd5c\uc885 \uacb0\uacfc\uac12\uc73c\ub85c \ucde8\ud569\ud558\ub294\ub370 \uc0ac\uc6a9\ub41c\ub2e4. \uc774 \uacfc\uc815\uc740 \ubcd1\ub82c\ucc98\ub9ac\uc5d0\ub3c4 \ubd88\uad6c\ud558\uace0 \uc804\uccb4 reduction\uc774 \uc815\ud655\ud558\uac8c \uc0b0\ucd9c\ub418\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Integer example18 = Stream.of(1, 2, 3)\n        .parallel()\n        .reduce(0, (a, b) -> a + b, Integer::sum);\n\/\/ 6\n\nInteger example19 = Stream.&lt;Integer>empty()\n        .parallel()\n        .reduce(0, (a, b) -> a + b, Integer::sum);\n\/\/ 0<\/code><\/pre>\n\n\n\n<p>\uc774 \uc0d8\ud50c\uc5d0\uc11c combiner\ub294 \ubcd1\ub82c\uc5f0\uc0b0 \uacfc\uc815\uc5d0\uc11c \uac01\uae30 \ub2e4\ub978 subtask\ub4e4\uc774 \uacc4\uc0b0\ud55c \uacb0\uacfc\ub97c \ucde8\ud569\ud558\ub294 \uc5ed\ud560\uc744 \ud55c\ub2e4. <code>Integer::sum<\/code> method reference\ub294 <code>(a, b) -> a + b<\/code> \uc640 \ub3d9\uc77c\ud55c \ubaa9\uc801\uc774\uc9c0\ub9cc \uc880 \ub354 \uac04\uacb0\ud55c \ud615\ud0dc\ub97c \uac00\uc9c4\ub2e4.<\/p>\n\n\n\n<p>reduce method\uc5d0\uc11c identity \uac12\uc744 \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc8fc\uc758\ub97c \uae30\uc6b8\uc5ec\uc57c \ud55c\ub2e4. identity \uac12\uc744 \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \ubcd1\ub82c\ucc98\ub9ac Stream\uc5d0\uc11c \uac01 subtask\ub4e4\uc740 \uc774 \uac12\uc744 \ucd08\uae30 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud55c\ub2e4. \uc774\ub294 identity\uac12\uc774 \uac01 subtask\ub4e4\uc758 reduction\uacfc\uc815\uc5d0\uc11c \ucd08\uae30\uac12 \uc5ed\ud560\uc744 \ud55c\ub2e4\ub294 \uac83\uc744 \uc758\ubbf8\ud55c\ub2e4. \uacb0\uacfc\uc801\uc73c\ub85c \uc55e \uc0d8\ud50c\uc758 identity\uac12\uc744 0\uc5d0\uc11c 10\uc73c\ub85c \ubcc0\uacbd\ud55c\ub2e4\uba74 \uacb0\uacfc\uac12\uc740 16\uc5d0\uc11c 36\uc73c\ub85c \ubc14\ub00c\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Integer example20 = Stream.of(1, 2, 3)\n        .parallel()\n        .reduce(10, (a, b) -> a + b, Integer::sum);\n\/\/ 36<\/code><\/pre>\n\n\n\n<p>Numeric stream \uc778\ud130\ud398\uc774\uc2a4\ub3c4 reduce method\ub97c \uc81c\uacf5\ud558\uc9c0\ub9cc 3\ubc88\uc9f8 overloaded \ubc84\uc804\uc778 combiner function\uc744 \uc0ac\uc6a9\ud558\ub294 \ud615\ud0dc\ub294 \uc81c\uacf5\ud558\uc9c0 \uc54a\ub294\ub2e4. \uc65c\ub0d0\ud558\uba74 \uc774\ub4e4 reduction operation\uc740 \uc9c1\uad00\uc801\uc774\uace0 identity\uc640 accumulation function\ub9cc\uc744 \uc774\uc6a9\ud558\ub354\ub77c\ub3c4 \ud6a8\uacfc\uc801\uc73c\ub85c \ucc98\ub9ac\uac00 \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OptionalInt example21 = IntStream.of(0, 1, 2)\n        .reduce((a, b) -> a + b);\n\/\/ Optional&#91;3]\nSystem.out.println(\"example21 = \" + example21);\n\nint example22 = IntStream.of(0, 1, 2)\n        .reduce(10, (a, b) -> a + b);\n\/\/ 13<\/code><\/pre>\n\n\n\n<p>\ud2b9\uc815 method\ub4e4\uc740 numeric stream \uc778\ud130\ud398\uc774\uc2a4\uc5d0\ub9cc \uc874\uc7ac\ud558\uae30\ub3c4 \ud55c\ub2e4. \uc5ec\uae30\uc11c\ubd80\ud130\ub294 \uc774\ub4e4 \ud2b9\ud654\ub41c method\ub4e4\uc5d0 \ub300\ud574 \uc54c\uc544 \ubcf4\ub3c4\ub85d \ud558\uaca0\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">sum method<\/h3>\n\n\n\n<p>sum method\ub294 \uc544\ub798\uc640 \uac19\uc740 \ud615\ud0dc\ub97c \uac00\uc9c4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ IntStream\nint sum();\n\/\/ LongStream\nlong sum();\n\/\/ DoubleStream\ndouble sum();<\/code><\/pre>\n\n\n\n<p>\ub0b4\ubd80\ub97c \uc0b4\ud3b4\ubcf4\uba74 IntStream\uacfc LongStream\uc740 identity\uac12\uacfc \ub354\ubd88\uc5b4 \uac04\ub2e8\ud55c reduction \uc5f0\uc0b0\uc744 \ud65c\uc6a9\ud574\uc11c \uc774\ub4e4 sum method\ub97c \uad6c\ud604\ud55c\ub2e4. \uadf8\ub7ec\ub098, DoubleStream\uc740 \ud569\uacc4\ub97c \uc0b0\ucd9c\ud558\uae30 \uc704\ud574 \ubd80\ub3d9\uc18c\uc218\uc810 \uc5f0\uc0b0 \uad00\ub828\ub41c \uc880 \ub354 \ubcf5\uc7a1\ud55c \uc54c\uace0\ub9ac\uc998\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int example23 = IntStream.of(1, 2, 3)\n        .sum();\n\/\/ 6\n\nlong example24 = LongStream.of(1L, 2L, 3L)\n        .sum();\n\/\/ 6\n\ndouble example25 = DoubleStream.of(1.1, 2.2, 3.3)\n        .sum();\n\/\/ 6.6<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">average method<\/h3>\n\n\n\n<p>\uc544\ub798\uc758 method\ub97c \uc774\uc6a9\ud558\uba74 numeric stream\uc758 \ud3c9\uade0\uac12\uc744 \uacc4\uc0b0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ IntStream\n\/\/ LongStream\n\/\/ DoubleStream\nOptionalDouble average();<\/code><\/pre>\n\n\n\n<p>\ubaa8\ub4e0 numeric stream \uc778\ud130\ud398\uc774\uc2a4\ub4e4\uc740 \ub3d9\uc77c\ud55c \ud615\ud0dc\uc758 \uc774 method\ub97c \uc9c0\uc6d0\ud558\uba70 \uc544\ub798\uc640 \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OptionalDouble example26 = IntStream.of(1, 2, 3)\n        .average();\n\/\/ OptionalDouble&#91;2.0]\n\nOptionalDouble example27 = LongStream.of(1L, 2L, 3L)\n        .average();\n\/\/ OptionalDouble&#91;2.0]\n\nOptionalDouble example28 = DoubleStream.of(1.1, 2.2, 3.3)\n        .average();\n\/\/ OptionalDouble&#91;2.1999999999999997]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">summary statistics method<\/h3>\n\n\n\n<p>Java Stream API\uc5d0\uc11c <code>summaryStatistics<\/code> method\ub294 Stream\uc758 element\uc5d0 \ub300\ud55c \ud1b5\uacc4 \ub370\uc774\ud130\ub97c \ucd94\ucd9c\ud558\uae30 \uc704\ud574 numeric stream\uacfc \uac19\uc774 \uc0ac\uc6a9\ud55c\ub2e4. \uc774 \uba54\uc18c\ub4dc\ub294 \uc544\ub798\uc640 \uac19\uc740 \uc815\ubcf4\ub97c \ud3ec\ud568\ud558\ub294 \uc694\uc57d\ud1b5\uacc4\ub97c \ubc18\ud658\ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Count<\/strong>: Stream\uc5d0 \ud3ec\ud568\ub41c element\uc758 \uac2f\uc218<\/li>\n\n\n\n<li><strong>Sum<\/strong>: element\ub4e4\uc758 \ucd1d \ud569\uacc4<\/li>\n\n\n\n<li><strong>Min<\/strong>: Stream\uc758 element\ub4e4 \uc911 \ucd5c\uc18c\uac12<\/li>\n\n\n\n<li><strong>Max<\/strong>: Stream\uc758 element\ub4e4 \uc911 \ucd5c\ub300\uac12<\/li>\n\n\n\n<li><strong>Average<\/strong>: element\ub4e4\uc758 \ud3c9\uade0\uac12<\/li>\n<\/ul>\n\n\n\n<p>\uc774 method\ub294 \ud55c \ubc88\uc758 \ud638\ucd9c\ub85c numeric stream\uc73c\ub85c \ubd80\ud130 \ub2e4\uc591\ud55c \ud1b5\uacc4\uc815\ubcf4\ub97c \ucd94\ucd9c\ud560 \uc218 \uc788\ub294 \ud3b8\ub9ac\ud55c \ubc29\ubc95\uc744 \uc81c\uacf5\ud55c\ub2e4.<\/p>\n\n\n\n<p>\uc774 method\uc758 \ud615\ud0dc\ub294 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ IntStream\nIntSummaryStatistics summaryStatistics();\n\/\/ LongStream\nLongSummaryStatistics summaryStatistics();\n\/\/ DoubleStream\nDoubleSummaryStatistics summaryStatistics();<\/code><\/pre>\n\n\n\n<p>\uac01 method\ub4e4\uc740 \uac1c\ubcc4 \ud0c0\uc785\uc5d0 \ub300\uc751\ud558\ub294 SummaryStatistics \ud074\ub798\uc2a4\uc758 \uac1d\uccb4\ub97c \ubc18\ud658\ud558\uba70 \ub2e4\uc591\ud55c \ud1b5\uacc4\uc815\ubcf4 \ud655\uc778\uc744 \uc704\ud55c \uc720\uc6a9\ud55c method\ub4e4\uc744 \uc81c\uacf5\ud55c\ub2e4. \uc544\ub798\uc758 \uc0d8\ud50c\uc740 IntStream\uc744 \uc774\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc8fc\uba70 \ub2e4\ub978 numeric stream \ub4e4\ub3c4 \uc774\uc640 \uc720\uc0ac\ud55c \ubc29\ubc95\uc73c\ub85c \ub3d9\uc791\ud55c\ub2e4. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IntSummaryStatistics example29 = IntStream.of(1, 2, 3)\n        .summaryStatistics();\nlong example29Count = example29.getCount();\n\/\/ 3\nSystem.out.println(\"count = \" + example29Count);\nlong example29Sum = example29.getSum();\n\/\/ 6\nSystem.out.println(\"example29Sum = \" + example29Sum);\nint example29Min = example29.getMin();\n\/\/ 1\nSystem.out.println(\"example29Min = \" + example29Min);\nint example29Max = example29.getMax();\n\/\/ 3\nSystem.out.println(\"example29Max = \" + example29Max);\ndouble example29Average = example29.getAverage();\n\/\/ 2.0<\/code><\/pre>\n\n\n\n<p>\ub610\ud55c, SummaryStatistics \uac1d\uccb4\ub97c \ub2e4\ub978 \ud1b5\uacc4\uc815\ubcf4\uc640 \uacb0\ud569\uc2dc\ud0ac \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>example29.combine(IntStream.of(4, 5, 6)\n        .summaryStatistics());\n\/\/ {count=6, sum=21, min=1, average=3,500000, max=6}<\/code><\/pre>\n\n\n\n<p>\uc544\ub798\uc640 \uac19\uc774 SummaryStatistics \uac1d\uccb4\uc5d0 element\ub97c \ucd94\uac00\uc2dc\ud0a4\ub294 \uac83\ub3c4 \uac00\ub2a5\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>example29.accept(10);\n\/\/ {count=7, sum=31, min=1, average=4,428571, max=10}<\/code><\/pre>\n\n\n\n<p>\uc704 \uc0d8\ud50c\uc5d0\uc11c \ubcf4\ub4ef\uc774 \uc0c8\ub85c\uc6b4 element\ub97c \ucd94\uac00\ud560 \uacbd\uc6b0 \uc774 element\ub97c \uc218\uc6a9\ud558\uae30 \uc704\ud574 \ubaa8\ub4e0 \uac12\ub4e4\uc5d0 \ub300\ud55c \uc7ac\uacc4\uc0b0\uc774 \uc774\ub8e8\uc5b4\uc838\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p>\ud145\ube48 Stream\uac1d\uccb4\ub97c \ub300\uc0c1\uc73c\ub85c \uc694\uc57d \ud1b5\uacc4 method\ub97c \ud638\ucd9c\ud560 \uacbd\uc6b0 \uadf8 \uacb0\uacfc\ub294 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IntSummaryStatistics example30 = IntStream.empty()\n        .summaryStatistics();\n\/\/ {count=0, sum=0, min=2147483647, average=0,000000, max=-2147483648}<\/code><\/pre>\n\n\n\n<p>\uac2f\uc218\uc640 \ud569\uacc4, \uadf8\ub9ac\uace0 \ud3c9\uade0\uc740 0\uc774 \ub41c\ub2e4. \ubc18\uba74 <code>min<\/code>\uacfc <code>max<\/code> \uac12\uc740 \uac01\uac01 <code>Integer.MAX_VALUE\uc640<\/code> <code>Integer.MIN_VALUE\uac00<\/code> \ub41c\ub2e4. \uc774\ub4e4 \uc784\uacc4\uce58 \uac12\ub4e4\uc740 \uc77c\uc885\uc758 placeholder \uc5ed\ud560\uc744 \ud558\uba70 stream\uc5d0 element\uac00 \ucd94\uac00\ub420 \uacbd\uc6b0 \uc774\ub4e4 placeholder \uac12\uc740 \uac31\uc2e0\ub41c\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc694\uc57d\ud558\uba70&#8230;<\/h2>\n\n\n\n<p>\ud65c\uc6a9\uac00\ub2a5\ud55c \ub2e4\uc591\ud55c reduction \uc5f0\uc0b0\ub4e4\uc774 \ub9ce\uc544 \ucc98\uc74c \uc811\ud560\uacbd\uc6b0 \uc88c\uc808\uc744 \ub9db\ubcfc \uc218\ub3c4 \uc788\ub2e4. \ud55c\ud3b8\uc73c\ub85c\ub294 \uc774\ub7f0 \ub2e4\uc591\uc131\uc774 \uac01\uae30 \ub2e4\ub978 task\uc5d0 \ub9de\ub294 \uc801\uc808\ud55c \ud234\uc744 \uc81c\uacf5\ud55c\ub2e4\ub294 \uce21\uba74\uc5d0\uc11c \ub3c4\uc6c0\uc774 \ub420 \uc218 \uc788\uc9c0\ub9cc \ub2e4\ub978 \ud55c\ud3b8\uc73c\ub85c\ub294 \ubaa8\ub4e0 \uc635\uc158\ub4e4\uc744 \ubaa8\ub450 \uc774\ud574\ud558\ub824\uba74 \ubd80\ub2f4\uc2a4\ub7ec\uc6b8 \uc218\ub3c4 \uc788\ub2e4. \uc774 \uae00\uc740 \uba85\ud655\ud55c \uc0ac\uc6a9\ubc95\uc744 \uc704\ud574 \uac00\uc7a5 \uacf5\ud1b5\uc801\uc73c\ub85c \ud65c\uc6a9\ub418\ub294 reduction \uc5f0\uc0b0\uc758 \uc0d8\ud50c\uacfc \uc0c1\uc138 \uc124\uba85\uc744 \uc81c\uacf5\ud55c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java\uc5d0\uc11c Stream\uc744 \ub2e4\ub8e8\ub2e4 \ubcf4\uba74 stream\uc5d0 \uc788\ub294 \uac12\ub4e4\uc744 \ud558\ub098\uc758 \uacb0\uacfc \uac12\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \uc791\uc5c5\ub4e4\uc774 \ud754\ud788 \ubc1c\uc0dd\ud55c\ub2e4. stream\uc744 \ud558\ub098\uc758 \uac12\uc73c\ub85c reducing\ud558\uac70\ub098 \ubaa8\ub4e0 \uac12\uc744 \ub354\ud574 \ud558\ub098\uc758 \uac12\uc73c\ub85c \ucde8\ud569\ud558\ub294 \uc791\uc5c5\ub4e4\uc774 \uc5ec\uae30\uc5d0 \ud574\ub2f9\ud55c\ub2e4. Java Stream API\ub294 \uc774\ub7f0 \uc77c\ub828\uc758 \uc791\uc5c5\ub4e4\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ud560 \uc218 \uc788\ub3c4\ub85d \uc9c1\uad00\uc801\uc774\uba74\uc11c \uac15\ub825\ud55c \ud234\uc744 \uc81c\uacf5\ud55c\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 \ucf54\ub4dc\ub97c \uae54\ub054\ud558\uac8c \ud558\uace0 \uc6d0\ud558\ub294 \uc131\uacfc\ub97c \ub2ec\uc131\ud560 \uc218 \uc788\ub3c4\ub85d \uc774\ub7f0 operation\ub4e4\uc758 \ud65c\uc6a9 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf8\ub2e4. \uc55e\uc73c\ub85c \ub2e4\ub8e8\uac8c \ub420 \ubaa8\ub4e0 Operation\ub4e4\uc740 Terminal Operation\uc774\ub77c\uace0 \ud558\uba70 Stream\uc744 \uac00\uacf5\ud574\uc11c \ubc18\ud658\ub420 \uac12\uc73c\ub85c \ubcc0\ud615\ud55c \ub2e4\uc74c Stream\uc744 Close\ud55c\ub2e4\ub294 \uc758\ubbf8\ub97c \uac16\uace0 \uc788\ub2e4. count method Stream\uc5d0\uc11c \ucc98\ub9ac\ud558\ub294&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/skanto.co.kr\/?p=1561\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[14,7],"tags":[],"class_list":["post-1561","post","type-post","status-publish","format-standard","hentry","category-sw-development","category-7"],"_links":{"self":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1561","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1561"}],"version-history":[{"count":16,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1561\/revisions"}],"predecessor-version":[{"id":1579,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1561\/revisions\/1579"}],"wp:attachment":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}