1. μλ° μ€νΈλ¦Ό(Stream)μ΄λ?
μλ° μ€νΈλ¦Ό(Stream)μ μλ° 8μμ λμ λ λ°μ΄ν° μ²λ¦¬ λ° μ»¬λ μ μ‘°μμ μν μλ‘μ΄ κ°λ μ λλ€. μ€νΈλ¦Όμ λ°μ΄ν°μ μ°μλ νλ¦μ νννλ κ°λ μΌλ‘, λ°°μ΄μ΄λ 컬λ μ λ±μ λ°μ΄ν° μμ€μμ λλ€μμ μ΄μ©νμ¬ κ°κ²°νκ³ ν¨κ³Όμ μΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μκ² ν΄μ€λλ€.
μ€νΈλ¦Όμ λ΄λΆμ μΌλ‘ λ°μ΄ν°λ₯Ό μμ°¨μ μΌλ‘ μ²λ¦¬νλ©°, λ³λ ¬ μ²λ¦¬λ₯Ό μν κΈ°λ₯λ μ 곡ν©λλ€. λ°μ΄ν°μ μ€κ°μ²λ¦¬ λ° μ΅μ’ μ²λ¦¬λ₯Ό μν λ€μν λ©μλλ₯Ό μ 곡νμ¬ λ°μ΄ν°λ₯Ό νν°λ§νκ±°λ 맀ννλ λ±μ λ€μν μμ μ μνν μ μμ΅λλ€.
μ€νΈλ¦Όμ ν¨μν νλ‘κ·Έλλ°μ κ°λ μ λμ νμ¬ μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμμΌμ€λλ€. λν, μ§μ°λ μ°μ°μ μννμ¬ ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ μ¬μ©μ κ°λ₯νκ² ν©λλ€.
λ€μ νλͺ©μμλ μ€νΈλ¦Όμ μ£Όμ νΉμ§κ³Ό μ¬μ©λ²μ λν΄ μ΄ν΄λ³΄κ² μ΅λλ€.
2. μλ° μ€νΈλ¦Ό(Stream)μ νΉμ§
μλ° μ€νΈλ¦Ό(Stream)μ μ£Όμ νΉμ§μ λ€μκ³Ό κ°μ΅λλ€:
μ°μλ νλ¦: μ€νΈλ¦Όμ λ°μ΄ν°μ μ°μλ νλ¦μ ννν©λλ€. λ°μ΄ν°λ₯Ό μ°μλ μμλ€μ μνμ€λ‘ μ²λ¦¬νλ κ²μ κ°λ₯νκ² ν΄μ€λλ€. μ΄λ λ°λ³΅λ¬Έμ μ¬μ©νμ§ μκ³ λ λ°μ΄ν°λ₯Ό μμ°¨μ μΌλ‘ μ²λ¦¬ν μ μλ€λ μ₯μ μ μ 곡ν©λλ€.
λ΄λΆ λ°λ³΅: μ€νΈλ¦Όμ λ΄λΆμ μΌλ‘ λ°μ΄ν°λ₯Ό λ°λ³΅ μ²λ¦¬νλ―λ‘ κ°λ°μκ° μ§μ λ°λ³΅λ¬Έμ μμ±ν νμκ° μμ΄μ‘μ΅λλ€. λμ , λλ€μμ μ΄μ©νμ¬ μ²λ¦¬ κ³Όμ μ μ μΈνμΌλ‘ ννν μ μμ΅λλ€.
ν¨μν νλ‘κ·Έλλ°: μ€νΈλ¦Όμ ν¨μν νλ‘κ·Έλλ°μ κ°λ μ λμ νμ¬ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ λμ¬μ€λλ€. μ€νΈλ¦Όμ λ©μλ 체μ΄λμ ν΅ν΄ λ€μν μ°μ°μ μ‘°ν©ν μ μμΌλ©°, κ°κ°μ μ°μ°μ λ 립μ μ΄κ³ μ¬μ΄λ μ΄ννΈκ° μλ ν¨μλ‘ μμ±λμ΄μΌ ν©λλ€.
μ§μ°λ μ°μ°: μ€νΈλ¦Όμ μ΅μ’ μ°μ°μ΄ νΈμΆλ λκΉμ§ μ€κ° μ°μ°μ μ§μ°νμ¬ μ²λ¦¬ν©λλ€. μ΄λ νμν λ°μ΄ν°λ§ μ²λ¦¬νκ³ , λΆνμν λ°μ΄ν° μ²λ¦¬λ₯Ό νΌν μ μμ΄ ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ μ¬μ©μ κ°λ₯νκ² ν©λλ€.
λ³λ ¬ μ²λ¦¬: μ€νΈλ¦Όμ λ΄λΆμ μΌλ‘ λ³λ ¬ μ²λ¦¬λ₯Ό μ§μν©λλ€. λ§μ λ°μ΄ν°λ₯Ό λμμ μ²λ¦¬ν μ μλ λ³λ ¬ μ€νΈλ¦Όμ μ¬μ©νλ©΄ λ©ν°μ½μ΄ νλ‘μΈμμ μ±λ₯μ μ΅λν νμ©ν μ μμ΅λλ€.
μλ° μ€νΈλ¦Όμ μ΄λ¬ν νΉμ§λ€μ ν΅ν΄ κ°κ²°νκ³ ν¨μ¨μ μΈ λ°μ΄ν° μ²λ¦¬λ₯Ό κ°λ₯νκ² ν΄μ£Όλ κ°λ ₯ν λꡬμ λλ€. λ€μ νλͺ©μμλ μλ° μ€νΈλ¦Όμ μ¬μ©λ²μ λν΄ μ΄ν΄λ³΄κ² μ΅λλ€.
3. μλ° μ€νΈλ¦Ό(Stream)μ μ¬μ©λ²
μλ° μ€νΈλ¦Ό(Stream)μ μ¬μ©νκΈ° μν΄μλ λ€μκ³Ό κ°μ λ¨κ³λ₯Ό λ°λΌμΌ ν©λλ€:
- μ€νΈλ¦Ό μμ±: μ€νΈλ¦Όμ μμ±νκΈ° μν΄μλ λ°μ΄ν° μμ€λ₯Ό κ°μ ΈμμΌ ν©λλ€. λ°°μ΄, 컬λ μ
, νμΌ λ± λ€μν λ°μ΄ν° μμ€λ₯Ό μ€νΈλ¦ΌμΌλ‘ λ³νν μ μμ΅λλ€. μλ₯Ό λ€μ΄, ArrayListμ μ€νΈλ¦Όμ μμ±νλ €λ©΄
stream()
λ©μλλ₯Ό νΈμΆνλ©΄ λ©λλ€.
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
- μ€κ° μ°μ° μν: μ€νΈλ¦Όμ κ°κ³΅νκΈ° μν΄ μ€κ° μ°μ°μ μ¬μ©ν μ μμ΅λλ€. μ€κ° μ°μ°μ λ°μ΄ν°λ₯Ό λ³ννκ±°λ νν°λ§νλ μμ
μ μνν©λλ€. μλ₯Ό λ€μ΄,
filter()
λ©μλλ₯Ό μ¬μ©νμ¬ μ‘°κ±΄μ λ§λ μμλ§μ κ±Έλ¬λΌ μ μμ΅λλ€.
Stream<String> filteredStream = stream.filter(s -> s.length() > 5);
- μ΅μ’
μ°μ° μν: μ΅μ’
μ°μ°μ μ€νΈλ¦Όμ μμλ₯Ό μλΉνμ¬ κ²°κ³Όλ₯Ό μμ±νκ±°λ λ°νν©λλ€. μ€νΈλ¦Όμ μμλ€μ μμ§νμ¬ μ»¬λ μ
μΌλ‘ λ°ννκ±°λ, μμλ€μ νλμ© νμνκ±°λ, μμλ€μ μ΄ν©νκ±°λ, μμλ€μ κ°μλ₯Ό μΈλ λ±μ μμ
μ μνν μ μμ΅λλ€. μλ₯Ό λ€μ΄,
collect()
λ©μλλ₯Ό μ¬μ©νμ¬ μ€νΈλ¦Όμ μμλ₯Ό 리μ€νΈλ‘ λ°νν μ μμ΅λλ€.
List<String> resultList = filteredStream.collect(Collectors.toList());
μλ° μ€νΈλ¦Όμ μμ κ°μ΄ λ€μν λ©μλ 체μ΄λμ ν΅ν΄ λ°μ΄ν° μ²λ¦¬ μμ μ κ°κ²°νκ² ννν μ μμ΅λλ€. μ€κ° μ°μ°κ³Ό μ΅μ’ μ°μ°μ μ‘°ν©νμ¬ νμν λ°μ΄ν° μ²λ¦¬λ₯Ό μνν μ μμ΅λλ€. λν, νμν κ²½μ°μλ λ³λ ¬ μ²λ¦¬λ₯Ό μ¬μ©νμ¬ μμ μ κ°μνν μλ μμ΅λλ€.
μ€νΈλ¦Όμ λΆνμν λ°μ΄ν° μ²λ¦¬λ₯Ό νΌνκ³ μ μΈμ μΌλ‘ μ½λλ₯Ό μμ±ν μ μλ μ₯μ μ μ 곡νμ¬, ν¨μ¨μ μ΄κ³ κ°λ μ± μ’μ λ°μ΄ν° μ²λ¦¬λ₯Ό κ°λ₯νκ² ν©λλ€.
4. μλ° μ€νΈλ¦Ό(Stream)μ μμ : νν°λ§
μλ° μ€νΈλ¦Ό(Stream)μ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό νν°λ§νλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€. νν°λ§μ μ€νΈλ¦Όμ μμλ€ μ€μμ νΉμ 쑰건μ λ§μ‘±νλ μμλ€λ§μ μ ννλ μμ μ λ§ν©λλ€. νν°λ§μ λ°μ΄ν°μ 쑰건μ λ°λΌ μ νμ μΌλ‘ μμ μ μνν λ μ μ©νκ² μ¬μ©λ©λλ€.
λ€μμ μλ° μ€νΈλ¦Όμ μ¬μ©νμ¬ λ¬Έμμ΄ λ¦¬μ€νΈμμ κΈΈμ΄κ° 5 μ΄μμΈ λ¬Έμμ΄λ€λ§μ νν°λ§νλ μμ μ½λμ λλ€:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
names.add("David");
names.add("Eve");
// κΈΈμ΄κ° 5 μ΄μμΈ λ¬Έμμ΄λ€λ§ νν°λ§
List<String> filteredNames = names.stream()
.filter(name -> name.length() >= 5)
.collect(Collectors.toList());
// κ²°κ³Ό μΆλ ₯
filteredNames.forEach(System.out::println);
}
}
μ μμ μμ filter()
λ©μλλ₯Ό μ¬μ©νμ¬ name.length() >= 5
λΌλ 쑰건μ λ§μ‘±νλ μμλ€μ μ ννκ³ , collect()
λ©μλλ₯Ό μ¬μ©νμ¬ μ νλ μμλ€μ 리μ€νΈλ‘ λ°νν©λλ€. μ΄ν forEach()
λ©μλλ₯Ό μ¬μ©νμ¬ λ¦¬μ€νΈμ μμλ€μ μΆλ ₯ν©λλ€.
μ€ν κ²°κ³Όλ λ€μκ³Ό κ°μ΅λλ€:
Alice
Charlie
David
μ μμ μμλ κΈΈμ΄κ° 5 μ΄μμΈ λ¬Έμμ΄λ€λ§ νν°λ§νμ§λ§, λ€μν 쑰건μ μ¬μ©νμ¬ νν°λ§ν μ μμ΅λλ€. filter()
λ©μλμ μ λ¬λλ λλ€μμ μμ νμ¬ μνλ 쑰건μΌλ‘ νν°λ§ μμ
μ μνν μ μμ΅λλ€.
μ€νΈλ¦Όμ μ¬μ©ν νν°λ§μ κ°κ²°νκ³ κ°λ μ±μ΄ μ’μ μ½λλ₯Ό μμ±ν μ μμΌλ©°, λ°μ΄ν° μ²λ¦¬ μμ μ μ μΈμ μΌλ‘ ννν μ μμ΄ μ μ§λ³΄μμ±μ λμ¬μ€λλ€.
5. μλ° μ€νΈλ¦Ό(Stream)μ μμ : 맀ν
μλ° μ€νΈλ¦Ό(Stream)μ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό 맀ννλ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€. 맀νμ μ€νΈλ¦Όμ κ° μμλ₯Ό λ€λ₯Έ μμλ‘ λ³ννλ μμ μ λ§ν©λλ€. 맀νμ λ°μ΄ν°λ₯Ό μνλ ννλ‘ λ³ννκ±°λ, νΉμ μμ±λ§μ μΆμΆνλ λ±μ μμ μ μ μ©νκ² μ¬μ©λ©λλ€.
λ€μμ μλ° μ€νΈλ¦Όμ μ¬μ©νμ¬ λ¬Έμμ΄ λ¦¬μ€νΈμ μμλ€μ λλ¬Έμλ‘ λ³ννλ μμ μ½λμ λλ€:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("alice");
names.add("bob");
names.add("charlie");
names.add("david");
names.add("eve");
// λλ¬Έμλ‘ λ§€ν
List<String> mappedNames = names.stream()
.map(name -> name.toUpperCase())
.collect(Collectors.toList());
// κ²°κ³Ό μΆλ ₯
mappedNames.forEach(System.out::println);
}
}
μ μμ μμ map()
λ©μλλ₯Ό μ¬μ©νμ¬ κ° μμλ₯Ό name.toUpperCase()
λ‘ λ§€νν©λλ€. μ΄ν collect()
λ©μλλ₯Ό μ¬μ©νμ¬ λ§€νλ μμλ€μ 리μ€νΈλ‘ λ°νν©λλ€.
μ€ν κ²°κ³Όλ λ€μκ³Ό κ°μ΅λλ€:
ALICE
BOB
CHARLIE
DAVID
EVE
μ μμ μμλ λ¬Έμμ΄ μμλ€μ λλ¬Έμλ‘ λ§€ννμ§λ§, λ°μ΄ν°μ ννλ μμ±μ λ°λΌ λ€μν 맀ν μμ
μ μνν μ μμ΅λλ€. map()
λ©μλμ μ λ¬λλ λλ€μμ μμ νμ¬ μνλ ννλ‘ λ§€ν μμ
μ μνν μ μμ΅λλ€.
μ€νΈλ¦Όμ μ¬μ©ν 맀νμ λ°μ΄ν°λ₯Ό μ μ°νκ² λ³ννκ±°λ μΆμΆν μ μλ κ°κ²°νκ³ κ°λ μ±μ΄ μ’μ μ½λλ₯Ό μμ±ν μ μμ΄ λ§€μ° μ μ©ν©λλ€.
λκΈ