1. Stream μ΄λ?
(0) λ»
λ°°μ΄μ΄λ 컬λ μ νλ μμν¬ μμ μ μ₯λ μμλ€μ νλμ© μν νλ©΄μ μ½λλ₯Ό μ€νν μ μλ κΈ°λ₯μ λ§ν¨.
λ΄λΆμ λ°λ³΅μκ° λ°λ‘ μ‘΄μ¬ν¨.
Java 8λΆν° μΆκ° λμκ³ , κ·Έ μ΄μ μμ μλ λ°°μ΄μ΄λ 컬λ μ μ λν μν μ°μ°μ ν λλ for, foreachλ₯Ό μ¨μΌ νκ±°λ Iterator μ¨μΌν΄μ μ½λ μκ° λ§μμ§κ³ μ§μ λΆ νμ. νμ§λ§ Stream λμ μ½λκ° κ°νΈν΄μ§κ³ κ°λ μ±μ΄ μ’μμ§.
(1) μμ±
a. κΈ°λ³Έ μλ£ν λ°°μ΄μ λν Stream μμ±
**μ°Έκ³ : λ°°μ΄(a,b)λ λ°°μ΄μ λν λ€μν 맀μλκ° μ μ₯λμ΄ μλ Arrays ν΄λμ€λ₯Ό μ΄μ©νμ¬ Stream μμ±
// int λ°°μ΄ μμ±
int[] scores = {100, 95,90,85,80};
// Arrays.stream(λ°°μ΄μ΄λ¦)μ ν΅ν΄ int λ°°μ΄μ λν μ€νΈλ¦Όμ μμ±ν¨.
// Arrays.stream μμλ λκ°μ΄ 100~80κΉμ§μ κ°μ΄ λ€μ΄ μμ.
//μ΄λ₯Ό μ΄μ©νκΈ° μν΄ Stream κ°μ²΄μ μ§μ΄ λ£μ. κΈ°λ³Έ μλ£νμ κΈ°λ³Έ μλ£ν λ³λ‘ Stream ν΄λμ€κ° μ‘΄μ¬
// ex) IntStream, DoubleStream ...
IntStream scoreStream = Arrays.stream(scores);
// μ€νΈλ¦Ό μμ λ°°μ΄μ λΆλΆλ§ λ£μ μ μμ
// Arrays.stream(λ°°μ΄μ΄λ¦, μμλΆλΆ index, λλΆλΆ index)
// μμ λΆλΆμ μ€νΈλ¦Όμ λ€μ΄κ°λ λ λΆλΆμ ν¬ν¨ λμ§ μμ!
int[] num = {1,2,3,4,5};
Intstream numStream = Arrays.stream(num,1,3);
//numStream = {2,3}; κ³Ό κ°μ λ§
b. μ°Έμ‘° μλ£ν λ°°μ΄μ λν Stream μμ±
// μ°Έμ‘° λ³μ μλ£νμΈ λ°°μ΄μ μ¬λ€λ¦ ν΄λμ€λ‘ μ΄λ£¨μ΄μ§ μ€νΈλ¦Ό ν΄λμ€ μ΄μ©νμ¬ κ°μ²΄ μμ± ν κ±°κΈ°λ€ μ€νΈλ¦Ό κ° λ£μ.
String[] langs = {"python", "java", "javascript","c","c++","c#"};
Stream<String> langStream = Arrays.stream(langs);
// μ€νΈλ¦Ό μμ λ°°μ΄μ λΆλΆλ§ λ£μ κ²½μ°
Stream<String> langStream = Arrays.stream(langs, 1, 3);
// langStream = {"java", "javascript"}; λ κ°μ λ§
c. 컬λ μ νλ μμν¬μ λν Stream μμ±
**μ°Έκ³ : 컬λ μ νλ μμν¬ ν΄λμ€λ stream()λΌλ μ€νΈλ¦Ό λ§λλ 맀μλλ₯Ό κ°μ§κ³ μμ.
// ArrayList μμ±
List<String> langList = new ArrayList<>();
langList.add("python");
langList.add("java");
langList.add("javascript");
langList.add("c");
langList.add("c++");
langList.add("c#");
// μ€νΈλ¦Ό μμ±ν΄μ, μ€νΈλ¦Ό κ°μ²΄μ λ£κΈ°
Stream<String> langListStream = langList.stream();
d. λ°°μ΄, νλ μμν¬ μμ΄ μ§ν΅μΌλ‘ μ€νΈλ¦Ό μμ±
//컬λ μ
νλ μμν¬, λ°°μ΄ μμ΄ μ§ν΅μΌλ‘ κ°μ€νλ λ²
//Stream.of (λ£μ μμλ€ λμ΄...)
Stream<String> LangListOfStream = Stream.of("python", "java", "javascript", "c", "c++", "c#");
2. Stream API μ¬μ©λ²
(1) νν
// μ€νΈλ¦Ό_μμ±.μ€κ°_μ°μ°()...μ’
λ£_μ°μ°();
// μ€νΈλ¦Ό_μμ± ννλ λ°°μ΄, 컬λ μ
νλ μ μν¬ λ§λ€ λνλ΄λ λ°©μμ΄ μμ΄ν μ μμ.
(2) νΉμ§
a. μ 체 νΉμ§
μ€νΈλ¦Όμ μ€κ° μ°μ°, μ’ λ£ μ°μ°μ ν΅ν΄ νν°λ§ νκ² λλ©΄ μμ λ°μ΄ν°λ₯Ό μμ§νκΈ° λλ¬Έμ μ¬μ¬μ©ν μκ° μλ€.
(λ°λΌμ κ°μ λ°°μ΄μ λν λ€λ₯Έ μ°μ°μ ν κ²½μ°, μ€νΈλ¦Όμ νλ² λ λ§λ€μ΄μ μν ν΄μΌ νλ€.)
b. μ€κ° μ°μ°
γ±. νλμ μ€νΈλ¦Όμ λν΄ μ¬λ¬ κ°λ₯Ό μΈ μ μλ€.
γ΄. μ’ λ£ μ°μ°μΌλ‘ λλ§Ίμμ νμ§ μμΌλ©΄ μλνμ§ μλλ€.
γ·. μ€κ° μ°μ° ν λλ§λ€ νν°λ§λ μ€νΈλ¦Όμ λ°ννλ€.
(ex-
filter, map, sorted, distinct, skip
)
c. μ’ λ£ μ°μ°
γ±. μ€νΈλ¦Ό μ°μ° νλλΉ λ± ν λ²λ§ μΈ μ μλ€.
γ΄. μ€νΈλ¦Όμ λ°ννμ§ μλλ€. (맀μλμ²λΌ νΉμ μλ£νμ λν λ°νκ°μ΄ μκ±°λ, λ°νκ° μμ΄ μ½λ μνλ§ νλ€.)
(ex-
count, min, max, sum, forEach, anyMatch
)
**μ°Έκ³ ** ArrayListλ₯Ό μμ±ν¨κ³Ό λμμ μ¬λ¬ κ°μ κ°μ μ²λ¦¬ νλ λ°©λ²
ArrayListλ μμ μ μ₯ μμ μΆκ°ν λ, .add(~~)λ‘ νλμ© μΆκ°ν΄μΌ ν΄μ λ°°μ΄λ³΄λ€ μ΄κΈ°νκ° λ²κ±°λ‘λ€.
ArrayListλ₯Ό λ°°μ΄μ²λΌ μμ±κ³Ό λμμ νλ²μ μ΄κΈ°ν μμΌμ£Όλ 맀μλκ° μλ€.
Arrays ν΄λμ€μ .asList() 맀μλ μ΄λ€.
List<String> langList = Arrays.asList("python", "java", "javascript","c","c++","c#");
νμ§λ§ ν΄λΉ 맀μλλ ν° λ¨μ μ΄ μλ€. λ°°μ΄ ν΄λμ€μ 맀μλλ‘ Arraylistλ₯Ό μμ± λ° μ΄κΈ°ν νκΈ° λλ¬Έμ listμ ν¬κΈ°κ° κ³ μ λμ΄λ²λ¦°λ€. κ°μ μμ λ‘κ² μΆκ°ν μ μλ ArrayListμ μ₯μ μ΄ μ¬λΌμ Έ λ²λ¦¬λ κ²μ΄λ€.
μΌκ΄ μ΄κΈ°νμ μ₯μ μ κ°μ§λ©΄μ ν΄λΉ λ¨μ μ νΌν΄ κ°λ €λ©΄, λ€μκ³Ό κ°μ΄ μ μΈ λ° μ΄κΈ°ν ν΄μΌνλ€.
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList("1","2","3","4","5"));
μ΄κ²μ ArrayList μ μΈ νμ κ·Έ μμλ€κ° asList 맀μλλ‘ κ°μ μΆκ°νλ€. ArrayListλ‘ λ§€μλλ₯Ό κ°μκΈ° λλ¬Έμ κ° μΆκ°λ μμ λ‘κ² μ΄λ£¨μ΄μ§λ€.
3. μ½λ 리뷰
//90μ μ΄μμΈ μ μλ§ μΆλ ₯
// μμ intμΈ scores λ°°μ΄μ λν νν°λ§
Arrays.stream(scores).filter(x -> x>=90).forEach(x -> System.out.println(x));
// ν΄λμ€λͺ
, 맀μλ λͺ
μ μ½λ‘ μΌλ‘ ꡬλΆν΄μ μ κ² λλ©΄,
// μμμ λμ΄μ¨ λ°μ΄ν°κ° μλμΌλ‘ μΈμλ‘ λ°μμ Έμ μμ sout printlnλ¬Έκ³Ό λκ°μ λμμ νλ€.
// μμ λκ°μ νν
//Arrays.stream(scores).filter(x -> x>=90).forEach(System.out::println);
//90μ μ΄μμΈ μ¬λμ μ
//count 맀μλλ λ°ννμ΄ long μ΄λΌ longμΌλ‘ λ³μ λ§λ¦
//(intλ‘ λ°κ³ μΆμΌλ©΄ μ€νΈλ¦Ό μμ νλ³νμ΄ νμ)
long count = Arrays.stream(scores).filter(x -> x>=90).count();
System.out.println(count);
System.out.println("------------------------------------------");
// 90μ μ΄μμΈ μ μλ€μ ν©
int sum = Arrays.stream(scores).filter(x -> x>=90).sum();
System.out.println(sum);
System.out.println("-----------------------------------------");
// 90μ μ΄μμΈ μ μλ€μ μ λ ¬
Arrays.stream(scores).filter(x -> x>=90).sorted().forEach(System.out::println);
System.out.println("-----------------------------------------");
4. μ€μ€λ‘ ν΄λ³΄κΈ°
package WorkOut_Myself;
import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class StreamBasic_Myself {
public static void main(String[] args) {
// κΈ°λ³Έ μλ£ν, μ°Έμ‘°ν, 컬λ μ
λ³λ‘ μ€νΈλ¦Ό μμ±ν΄μ μ€νΈλ¦Ό κ°μ²΄μ λ£κΈ°
// κΈ°λ³Έ μλ£ν μ΄μ©ν΄μ κ° κ³μ°. μ€κ° μ°μ°κ³Ό μ’
λ£ μ°μ°μ λ μλμ§ μ°Ύμμ μ§μ λ£μ΄λ³΄κΈ°.
int[] num = {1,2,3,4,5,6,7,8,9,10};
IntStream numStream = Arrays.stream(num, 0,9);
String[] name = {"John", "Sam", "Smith", "ν©μ¬μ±", "골리λ" };
Stream<String> nameStream = Arrays.stream(name);
ArrayList<Integer> score = new ArrayList<>(Arrays.asList(10,9,10,20,30,40,50,10));
Stream<Integer> scoreStream = score.stream();
HashMap<String, Integer> goal = new HashMap<>();
goal.put("λ°μ§μ±",24);
goal.put("μν₯λ―Ό",99);
goal.put("κΈ°μ±μ©",18);
goal.put("ν©ν¬μ°¬",5);
goal.put("κΉλ³΄κ²½",0);
goal.put("μ‘°μν¬",0);
Stream<Map.Entry<String,Integer>> Entry = goal.entrySet().stream();
Stream<String> players = goal.keySet().stream();
Stream<Integer> number = goal.values().stream();
System.out.println("λμ μ΄ 10μ μ΄μμΈ μ¬λλ§ κ±Έλ¬ λ΄κΈ°");
goal.entrySet().stream().filter(entry -> entry.getValue()>10).forEach(System.out::println);
//map(x -> x ~~) μΈμλ€λ‘ ν κ³μ°μ λ°ν κ°λ€λ‘ μλ‘μ΄ μ€νΈλ¦Ό λ°ν
OptionalDouble a = Arrays.stream(num).map(x -> x+100).average();
System.out.println(a);
}
}