<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>컬렉션 on Korobopolly's Dev Blog</title><link>https://korobopolly.github.io/tags/%EC%BB%AC%EB%A0%89%EC%85%98/</link><description>Recent content in 컬렉션 on Korobopolly's Dev Blog</description><generator>Hugo</generator><language>ko</language><lastBuildDate>Mon, 16 Feb 2026 13:14:00 +0900</lastBuildDate><atom:link href="https://korobopolly.github.io/tags/%EC%BB%AC%EB%A0%89%EC%85%98/index.xml" rel="self" type="application/rss+xml"/><item><title>Java Stream API - filter, map, collect와 병렬 스트림</title><link>https://korobopolly.github.io/posts/java-stream-api/</link><pubDate>Mon, 16 Feb 2026 13:14:00 +0900</pubDate><guid>https://korobopolly.github.io/posts/java-stream-api/</guid><description>&lt;h2 id="stream-api란"&gt;Stream API란?&lt;/h2&gt;
&lt;p&gt;Java 8에서 도입된 Stream API는 컬렉션 데이터를 함수형 스타일로 처리할 수 있게 해주는 강력한 도구입니다. Stream을 사용하면 데이터를 선언적으로 처리하고, 병렬 처리를 쉽게 구현할 수 있으며, 코드의 가독성을 크게 향상시킬 수 있습니다.&lt;/p&gt;
&lt;p&gt;Stream은 데이터의 흐름을 나타내며, 원본 데이터를 변경하지 않고 중간 연산과 최종 연산을 통해 데이터를 처리합니다. 이러한 특성 덕분에 불변성을 유지하면서도 효율적인 데이터 처리가 가능합니다.&lt;/p&gt;
&lt;h2 id="stream-생성-방법"&gt;Stream 생성 방법&lt;/h2&gt;
&lt;p&gt;Stream을 생성하는 다양한 방법이 있습니다.&lt;/p&gt;
&lt;h3 id="컬렉션으로부터-생성"&gt;컬렉션으로부터 생성&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;List&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; list &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; Arrays.&lt;span style="color:#89b4fa"&gt;asList&lt;/span&gt;(&lt;span style="color:#a6e3a1"&gt;&amp;#34;Apple&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e3a1"&gt;&amp;#34;Banana&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e3a1"&gt;&amp;#34;Cherry&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Stream&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; stream &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; list.&lt;span style="color:#89b4fa"&gt;stream&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 병렬 스트림&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Stream&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; parallelStream &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; list.&lt;span style="color:#89b4fa"&gt;parallelStream&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="배열로부터-생성"&gt;배열로부터 생성&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String&lt;span style="color:#89dceb;font-weight:bold"&gt;[]&lt;/span&gt; array &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; {&lt;span style="color:#a6e3a1"&gt;&amp;#34;Apple&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e3a1"&gt;&amp;#34;Banana&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e3a1"&gt;&amp;#34;Cherry&amp;#34;&lt;/span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Stream&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; stream &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; Arrays.&lt;span style="color:#89b4fa"&gt;stream&lt;/span&gt;(array);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 범위 지정&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f38ba8"&gt;int&lt;/span&gt;&lt;span style="color:#89dceb;font-weight:bold"&gt;[]&lt;/span&gt; numbers &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; {1, 2, 3, 4, 5};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;IntStream stream &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; Arrays.&lt;span style="color:#89b4fa"&gt;stream&lt;/span&gt;(numbers, 1, 4); &lt;span style="color:#6c7086;font-style:italic"&gt;// 2, 3, 4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="streamof-사용"&gt;Stream.of() 사용&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Stream&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; stream &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; Stream.&lt;span style="color:#89b4fa"&gt;of&lt;/span&gt;(&lt;span style="color:#a6e3a1"&gt;&amp;#34;Apple&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e3a1"&gt;&amp;#34;Banana&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e3a1"&gt;&amp;#34;Cherry&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Stream&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;Integer&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; numberStream &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; Stream.&lt;span style="color:#89b4fa"&gt;of&lt;/span&gt;(1, 2, 3, 4, 5);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="범위-생성"&gt;범위 생성&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 1부터 10까지 (10 포함)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;IntStream range &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; IntStream.&lt;span style="color:#89b4fa"&gt;rangeClosed&lt;/span&gt;(1, 10);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 1부터 10까지 (10 미포함)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;IntStream range2 &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; IntStream.&lt;span style="color:#89b4fa"&gt;range&lt;/span&gt;(1, 10);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="무한-스트림-생성"&gt;무한 스트림 생성&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// iterate: 초기값부터 시작해서 함수를 반복 적용&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Stream&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;Integer&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; evenNumbers &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; Stream.&lt;span style="color:#89b4fa"&gt;iterate&lt;/span&gt;(0, n &lt;span style="color:#89dceb;font-weight:bold"&gt;-&amp;gt;&lt;/span&gt; n &lt;span style="color:#89dceb;font-weight:bold"&gt;+&lt;/span&gt; 2);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// generate: 매번 새로운 값을 생성&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Stream&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;Double&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; randomNumbers &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; Stream.&lt;span style="color:#89b4fa"&gt;generate&lt;/span&gt;(Math::random);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 무한 스트림은 limit()으로 제한 필요&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Stream&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;lt;&lt;/span&gt;Integer&lt;span style="color:#89dceb;font-weight:bold"&gt;&amp;gt;&lt;/span&gt; first10Evens &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; Stream.&lt;span style="color:#89b4fa"&gt;iterate&lt;/span&gt;(0, n &lt;span style="color:#89dceb;font-weight:bold"&gt;-&amp;gt;&lt;/span&gt; n &lt;span style="color:#89dceb;font-weight:bold"&gt;+&lt;/span&gt; 2).&lt;span style="color:#89b4fa"&gt;limit&lt;/span&gt;(10);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="중간-연산-intermediate-operations"&gt;중간 연산 (Intermediate Operations)&lt;/h2&gt;
&lt;p&gt;중간 연산은 Stream을 반환하므로 여러 개를 연결(chaining)할 수 있습니다. 중간 연산은 지연 평가(lazy evaluation)되어 최종 연산이 호출될 때까지 실행되지 않습니다.&lt;/p&gt;</description></item></channel></rss>