λλμ΄ μ€λ streamμ λ°°μ λ€!! γ γ νΌμ 곡λΆν λ streamμ μ 리ν΄λ³΄κΈ°λ‘ νκ³ κ³μ λ―Έλ€μλλ° μ 리λ λ΄μ©μΌλ‘ λ°°μ°λ νμ€ν μ΄ν΄νκΈ°λ μ½κ³ , μ’μλ€ γ γ λλ€μ stream μμ μ°μ΅μΌλ‘ 체νμμΌμΌκ² λ€.π

βAnnotationλ?
μ£Όμκ³Ό λΉμ·ν μ λν μ΄μ μ μ 보 μ λ¬μ λͺ©μ μΌλ‘ λ§λ€μ΄μ§ λ¬Έλ² μμλ‘, μ£Όμμ κ°λ°μ, μ¦ μ¬λμκ² μ 보λ₯Ό μ λ¬νλ κ±°λΌλ©΄ μ λν μ΄μ μ compiler, λ€λ₯Έ νλ‘κ·Έλ¨μκ² μ 보λ₯Ό μ λ¬νλ€. (ex. @Override)
βμ λν μ΄μ μ μ’ λ₯λ 무μμ΄ μλκ°?
JDKμμ μ 곡νλ μ λν μ΄μ κ³Ό λ€λ₯Έ νλ‘κ·Έλ¨μμ μ 곡νλ μ λν μ΄μ μΌλ‘ λλλ©°, μ μλ νμ€ μ λν μ΄μ , νμλ λ©ν μ λν μ΄μ μ΄λΌ νλ€.
βνμ€ μ λν μ΄μ μμ보기
- @Override : λ©μλ μμλ§ λΆμΌ μ μλ μ λν μ΄μ μΌλ‘ μ μΈν λ©μλκ° μμ ν΄λμ€μ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νκ±°λ μΆμ λ©μλλ₯Ό ꡬννλ λ©μλλΌλ κ²μ μ»΄νμΌλ¬μκ² μλ €μ£Όλ μν
- @Deprecated : κΈ°μ‘΄μ μ¬μ©νλ κΈ°μ μ΄ λ€λ₯Έ κΈ°μ λ‘ λ체λμ΄ κΈ°μ‘΄ κΈ°μ μ μ μ©ν μ½λλ₯Ό λ μ΄μ μ¬μ©νμ§ μλλ‘ μ λνλ κ²½μ°μ μ¬μ©ν¨.
- @SuppressWarnings : μ»΄νμΌ κ²½κ³ λ©μμ§κ° λνλμ§ μλλ‘ ν¨. κ²½μ°μ λ°λΌ κ²½κ³ κ° λ°μν κ²μ΄ μΆ©λΆν μμλ¨μλ 묡μΈν΄μΌ ν κ²½μ° μ¬μ©ν¨.
- @FunctionalInterace : ν¨μν μΈν°νμ΄μ€λ₯Ό μ μΈν λ, μ»΄νμΌλ¬κ° ν¨μν μΈν°νμ΄μ€μ μ μΈμ΄ λ°λ₯΄κ² λμλμ§ νμΈνλλ‘ ν¨.
βλ©ν μ λν μ΄μ μμ보기
μ λν μ΄μ μ μ μνλ λ°μ μ¬μ©λλ μ λν μ΄μ μΌλ‘ μ λν μ΄μ μ μ μ© λμ λ° μ μ§ κΈ°κ°μ μ§μ νλ λ° μ¬μ©λ¨.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
- @Target : μ λν μ΄μ μ μ μ©ν λμμ μ§μ
- @Documented : μ λν μ΄μ μ λν μ λ³΄κ° javadocμΌλ‘ μμ±ν λ¬Έμμ ν¬ν¨λλλ‘ νλ μ λν μ΄μ μ€μ
- @Inherited : νμ ν΄λμ€κ° μ λν μ΄μ μ μμλ°λλ‘ ν¨
- @Retention : μ λν μ΄μ μ μ§μ μκ°μ κ²°μ νλ λ° μ¬μ©.
- @Repeatable : μ λν μ΄μ μ μ¬λ¬ λ² λΆμΌ μ μλλ‘ νμ©
βμ¬μ©μ μ μ μ λν μ΄μ μμ보기
μ¬μ©μκ° μ§μ μ λν μ΄μ μ μ μν΄μ μ¬μ©
@interface μ λν
μ΄μ
λͺ
{//μΈν°νμ΄μ€ μμ @κΈ°νΈλ§ λΆμ΄λ©΄ μ λν
μ΄μ
μ μ μν μ μμ
νμ
μμλͺ
(); //μ λν
μ΄μ
μμλ₯Ό μ μΈ
}
βLambda Expressionμ΄λ?
λλ€μμ ν¨μν νλ‘κ·Έλλ° κΈ°λ²μ μ§μνλ μλ°μ λ¬Έλ² μμλ‘, λλ€μμ λ©μλλ₯Ό νλμ μμΌλ‘ ννν κ².
μλ°λ JDK 1.8 μ΄ν λλ€μ λ± ν¨μν νλ‘κ·Έλλ° λ¬Έλ² μμλ₯Ό λμ ν¨. (λλ€μμ μ΄μ©νλ©΄ κΈ°μ‘΄μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°κ³Ό ν¨μν νλ‘κ·Έλλ°μ νΌν©νλ λ°©μμΌλ‘ λ³΄λ€ ν¨μ¨μ μΈ νλ‘κ·Έλλ°μ ν μ μλ€)
βν¨μν μΈν°νμ΄μ€
λλ€μμ κ°μ²΄μ§ν₯μ μΈμ΄μ νΉμ±μ κ°μ§ μλ°μ νΉμ±μ λ°λΌ μΌλ°μ μΈ ν¨μκ° μλλΌ μ΅λͺ μ κ°μ²΄μ΄κΈ° λλ¬Έμ ν¨μν μΈν°νμ΄μ€λ₯Ό μ΄μ©νλ©΄ κΈ°μ‘΄ μλ°μ λ¬Έλ² μμλ₯Ό ν΄μ§μ§ μμΌλ©΄μ ν¨μν νλ‘κ·Έλλ° κΈ°λ²μ μ¬μ©ν μ μλ€.
βλλ€μ κΈ°λ³Έ λ¬Έλ²
//κΈ°μ‘΄ λ©μλ νν λ°©μ
void sayHello(){
System.out.println("Hello");
}
//μμ μ½λλ₯Ό λλ€μμΌλ‘ ννν μ
() -> System.out.println("Hello");
λλ€μμ κΈ°λ³Έμ μΌλ‘ λ°ννμ κ³Ό μ΄λ¦μ μλ΅ν μ μμ. μ¦, λλ€ν¨μλ₯Ό μ’ μ’ μ΄λ¦μ΄ μλ ν¨μ, μ¦ μ΅λͺ ν¨μλΌ λΆλ₯΄κΈ°λ ν¨. λ©μλ λ°λμ μ€νλ¬Έμ΄ νλλ§ μ‘΄μ¬ν λ μ€κ΄νΈ, return λ¬Έ μλ΅ κ°λ₯(μΈλ―Έμ½λ‘ κΉμ§)
λ§€κ°λ³μ νμ λ μλ΅ κ°λ₯
public static void main(String[] args) {
(int n1,int n2)-> {return n1+n2;}//λ°ν νμ
κ³Ό λ©μλλͺ
μ κ±°, νμ΄ν μΆκ°
//(int n1,int n2)-> n1+n2 //λ μΆμ½ κ°λ₯
}
static int sum(int num1, int num2){
return num1+num2;
}
βν¨μν μΈν°νμ΄μ€ μ¬μ©
ν¨μν μΈν°νμ΄μ€μλ λ¨ νλμ μΆμ λ©μλλ§ μ μΈλ μ μλλ°, μ΄λ λλ€μκ³Ό μΈν°νμ΄μ€μ λ©μλκ° 1:1λ‘ λ§€μΉλμ΄μΌ νκΈ° λλ¬Έ.
package codeStates;
public class LambdaExample {
public static void main(String[] args) {
SumFunction s = (n1, n2) -> n1 + n2;
System.out.println(s.sum(2,3));
}
@FunctionalInterface
interface SumFunction{
int sum(int num1, int num2);
}
}
βμλ°μμ κΈ°λ³Έμ μΌλ‘ μ 곡νλ ν¨μν λ©μλ
λ§μ§λ§μΌλ‘ μλ°μμλ λΉλ²νκ² μ¬μ©λλ ν¨μν μΈν°νμ΄μ€λ₯Ό κΈ°λ³Έμ μΌλ‘ μ 곡νκ³ μμ. μ¦, κΈ°λ³Έμ μΌλ‘ λ΄μ₯λ ν¨μν μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬ λ§€λ² κ°μ κΈ°λ₯μ μννλ ν¨μν μΈν°νμ΄μ€λ₯Ό μ§μ λ§λλ λ²κ±°λ‘μμ μ€μ¬μ€.
package codeStates;
public class LambdaExample {
public static void main(String[] args) {
SumFunction s = (n1, n2) -> n1 + n2;
System.out.println(s.sum(2,3));
}
@FunctionalInterface
interface SumFunction{
int sum(int num1, int num2);
}
}
βλ©μλ λ νΌλ°μ€
λ©μλ μ°Έμ‘°λ λλ€μμμ λΆνμν λ§€κ°λ³μλ₯Ό μ κ±°ν λ μ£Όλ‘ μ¬μ©, μ¦ λλ€μμΌλ‘ λμ± κ°λ¨ν΄μ§ μ΅λͺ κ°μ²΄λ₯Ό λμ± λ κ°λ¨νκ² μ¬μ©νκ³ μΆμ κ°λ°μμ λμ¦κ° λ°μλ μ°λ¬Ό. (ν΄λμ€ μ΄λ¦ :: λ©μλ μ΄λ¦) λ©μλ μ°Έμ‘°λ λλ€μκ³Ό λ§μ°¬κ°μ§λ‘ μΈν°νμ΄μ€μ μ΅λͺ ꡬν κ°μ²΄λ‘ μμ±λλ―λ‘ μΈν°νμ΄μ€μ μΆμ λ©μλκ° μ΄λ€ λ§€κ°λ³μλ₯Ό κ°μ§κ³ , λ¦¬ν΄ νμ μ΄ λ¬΄μμ΄λμ λ°λΌ λ¬λΌμ§.
μ μ λ©μλ, μΈμ€ν΄μ€ λ©μλλ₯Ό μ°Έμ‘°νλ κ²½μ°)
//λ©μλ λ νΌλ°μ€(μ°Έμ‘°) : λλ€μμμ λΆνμν λ§€κ°λ³μλ₯Ό μ κ±°ν λ μ£Όλ‘ μ¬μ©
//ν΄λμ€ μ΄λ¦ :: λ©μλ μ΄λ¦ (μ μ , μΈμ€ν΄μ€ λ©μλλ₯Ό μ°Έμ‘°ν μ μκ³ , μμ±μ μ°Έμ‘°λ κ°λ₯)
IntBinaryOperator operator;
//μ μ λ©μλ
operator=Calculator::staticMethod;
System.out.println("μ μ λ©μλ κ²°κ³Ό : " + operator.applyAsInt(2, 3));//5
//μΈμ€ν΄μ€ λ©μλ
Calculator c = new Calculator();
operator = c::instanceMethod;
System.out.println("μΈμ€ν΄μ€ λ©μλ κ²°κ³Ό : " + operator.applyAsInt(2, 3));//6
μμ±μ μ°Έμ‘°νλ κ²½μ°)
package codeStates.lambda;
import java.util.function.BiFunction;
import java.util.function.Function;
//λ©μλ λ νΌλ°μ€ -> μμ±μ μ°Έμ‘°
class Member{
private String name;
private String id;
public Member(){
System.out.println("Member() μ€ν");
}
public Member(String id){
System.out.println("Member(String id) μ€ν");
this.id=id;
}
public Member(String name, String id){
System.out.println("Member(String name, String id) μ€ν");
this.name=name;
this.id=id;
}
public String getName(){
return name;
}
public String getId(){
return id;
}
}
public class LambdaExample2 {
public static void main(String[] args) throws Exception {
/*
μμ±μ μ°Έμ‘° λ¬Έλ²
ν΄λμ€ :: new
Interface Function<T,R>
T : type of input (arguments)
R : tyep of result (return ~)
Interface BiFunctioin<T,U,R>
T : type of the first argument to the function
U : type of the second argument to the function
R : type of the result of the function
*/
Function<String, Member> function1 = Member::new;
Member member1 = function1.apply("kimcoding");//Member(String id) μ€ν
BiFunction<String, String, Member> function2 = Member::new;
Member member2 = function2.apply("kimcoding", "κΉμ½λ©");//Member(String name, String id) μ€ν
}
}
βStreamμ΄λ?
μ€νΈλ¦Όμ΄λ λ°°μ΄, 컬λ μ μ μ μ₯ μμλ₯Ό νλμ© μ°Έμ‘°ν΄μ λλ€μμΌλ‘ μ²λ¦¬ν μ μλλ‘ ν΄μ£Όλ λ°λ³΅μ. μ€νΈλ¦Όμ μ¬μ©νλ©΄ List, Set, Map, λ°°μ΄ λ± λ€μν λ°μ΄ν° μμ€λ‘λΆν° μ€νΈλ¦Όμ λ§λ€ μ μκ³ , μ΄λ₯Ό νμ€νλ λ°©λ²μΌλ‘ λ€λ£° μ μμ.
βStreamμ ν΅μ¬ νΉμ§, μ μ¬μ©νλκ°?
κΈ°μ‘΄μ forλ¬Έμ΄λ Iteratorλ₯Ό μ¬μ©νλ κ²½μ°, μ½λκ° κΈΈκ³ λ³΅μ‘ν΄μ§. μ€νΈλ¦Όμ μ¬μ©νλ©΄ μ μΈν νλ‘κ·Έλλ° λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μμ΄ μΈκ°μΉνμ μ΄κ³ μ§κ΄μ μΌλ‘ μ½λ μμ±μ΄ κ°λ₯ν¨. λ, κΈ°μ‘΄ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ κ²½μ°μλ λ°μ΄ν° μμ€λ₯Ό κ°κΈ° λ€λ₯Έ λ°©μμΌλ‘ λ€λ€μΌ νμ§λ§, μ€νΈλ¦Όμ μ¬μ©νλ©΄ λ°μ΄ν° μμ€κ° 무μμ΄λμ κ΄κ³μμ΄ κ°μ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό κ°κ³΅, μ²λ¦¬ν μ μμ.
βλͺ λ Ήν νλ‘κ·Έλλ° vs μ μΈν νλ‘κ·Έλλ°
package codeStates.stream;
import java.util.List;
import java.util.stream.Stream;
//λͺ
λ Ήν νλ‘κ·Έλλ° vs μ μΈν νλ‘κ·Έλλ°
public class DeclaritiveProgrammingExample {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 4, 5, 6, 8);
//λͺ
λ Ήν νλ‘κ·Έλλ° : μ§μ λͺ¨λ μμλ₯Ό μννλ©° μμ
μν
int sum=0;
for(int number:numbers){
if(number > 4 && (number%2==0)) sum += number;
}
System.out.println("λͺ
λ Ήν νλ‘κ·Έλλ°μ μ¬μ©ν ν©κ³ : "+sum);
//μ μΈν νλ‘κ·Έλλ° : λ΄λΆκ° μ΄λ»κ² λμνλ μ§ λͺ°λΌλ μ΄λ€ μ½λκ° μ΄λ€ μν μ νλμ§ μ§κ΄μ μΌλ‘ νμ
κ°λ₯
System.out.println("μ μΈν νλ‘κ·Έλλ°μ μ¬μ©ν ν©κ³ : " +
numbers.stream()
.filter(number->number>4 && (number%2==0))
.mapToInt(number->number).sum()
);
}
}
βμ€νΈλ¦Όμ νΉμ§
1. μ€νΈλ¦Ό μ²λ¦¬ κ³Όμ μ μμ±, μ€κ° μ°μ°, μ΅μ’ μ°μ° μΈ λ¨κ³μ νμ΄ν λΌμΈμΌλ‘ ꡬμ±
2. μ€νΈλ¦Όμ μλ³Έ λ°μ΄ν° μμ€λ₯Ό λ³κ²½νμ§ μμ (read-only) -> μ€νΈλ¦Όμ κ·Έ μλ³Έμ΄ λλ λ°μ΄ν° μμ€μ λ°μ΄ν°λ€μ λ³κ²½νμ§ μμ. μ€μ§ λ°μ΄ν°λ₯Ό μ½μ΄μ¬ μ μκ³ , λ°μ΄ν°μ λν λ³κ²½κ³Ό μ²λ¦¬λ μμ±λ μ€νΈλ¦Ό μμμλ§ μνλ¨.
3. μ€νΈλ¦Όμ μΌνμ©μ΄λ€.(onetime-only) -> μ€νΈλ¦Όμ΄ μμ±λκ³ , μ€κ° μ°μ°μ κ±°μ³ μ΅μ’ μ°μ°μ΄ μνλκ³ λ νμλ μ€νΈλ¦Όμ λ«νκ³ μ¬μ¬μ© λΆκ°.
4. μ€νΈλ¦Όμ λ΄λΆ λ°λ³΅μμ΄λ€. -> μ€νΈλ¦Όμ 컬λ μ λ΄λΆμ λ°μ΄ν° μμ μ²λ¦¬ λ°©λ²(λλ€μ)μ μ£Όμ μμΌμ μμλ₯Ό λ°λ³΅ μ²λ¦¬.
βμ€νΈλ¦Όμ μμ±
- λ°°μ΄ μ€νΈλ¦Ό μμ±
- 컬λ μ μ€νΈλ¦Ό μμ±
- μμμ μ μ€νΈλ¦Ό μμ±
βλ°°μ΄ μ€νΈλ¦Ό μμ±
package codeStates.stream;
import java.util.Arrays;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.Stream;
//λ°°μ΄ μ€νΈλ¦Ό μμ±
public class ArraysStreamExample {
public static void main(String[] args) {
//λ¬Έμμ΄ λ°°μ΄ μ μΈ λ° ν λΉ
String[] arr = new String[]{"κΉμ½λ©", "μ΄μλ°", "λ°ν΄μ»€"};
//λ¬Έμμ΄ μ€νΈλ¦Ό μμ± -> λ κ°μ§ λ°©λ² Arrays.stream(), Stream.of()
// Stream<String> stream = Arrays.stream(arr);
Stream<String> stream = Stream.of(arr);
//μΆλ ₯
stream.forEach(System.out::println);
//Arrays ν΄λμ€μλ κΈ°λ³Έν λ°°μ΄μ λ°μ΄ν° μμ€λ‘ μ€νΈλ¦Όμ μμ±νλ λ©μλλ μμ
//IntStream, DoubleStream, LongStream -> μ«μμ κ΄λ ¨λ μ μ©ν λ©μλλ€ μ μλμ΄ μμ.
double[] doubleArr = {1.0, 2.0, 3.2};
DoubleStream doubleStream = Arrays.stream(doubleArr);
double average = doubleStream.average().getAsDouble();
//IntStreamμ μ μ©ν κΈ°λ₯λ€
//int λ°°μ΄λ‘ μ€νΈλ¦Ό μμ±
int[] intArr = {1, 2, 3, 4, 5, 6};
IntStream intStream = Arrays.stream(intArr);
//μ«μμ κ΄λ ¨λ κ²½μ° intStreamμ μ¬μ©νλ κ²μ κΆμ₯
System.out.println("sum="+intStream.sum());
// System.out.println("average="+intStream.average()); -> sum() λ©μλ νΈμΆ ν streamμ΄ λ«νκΈ° λλ¬Έμ μλ¬ λ°μ
}
}
β컬λ μ μ€νΈλ¦Ό μμ±
package codeStates.stream;
import java.util.*;
import java.util.stream.Stream;
//컬λ μ
μ€νΈλ¦Ό μμ±
/*
컬λ μ
μ΅μμ ν΄λμ€μΈ Collectionμ μ μλ stream() λ©μλλ₯Ό μ¬μ©νμ¬ μ€νΈλ¦Ό μμ± κ°λ₯
*/
public class CollectionStreamExample {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4);
Stream<Integer> stream = list.stream();
stream.forEach(System.out::print);
System.out.println();
Map<String, Integer> map=new HashMap<>();
map.put("James", 12);
map.put("Tomas", 10);
map.put("Amy", 9);
map.put("Sara", 8);
Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
//μ€λ¦μ°¨μ
entrySet.stream()
.sorted(Map.Entry.comparingByValue())
.forEach(e -> System.out.printf("key : " + e.getKey() + " value : " + e.getValue()+"\n"));
//λ΄λ¦Όμ°¨μ
entrySet.stream()
.sorted((a,b)-> b.getValue() - a.getValue())
.forEach(e -> System.out.printf("key : " + e.getKey() + " value : " + e.getValue()+"\n"));
}
}
βμμμ μ μ€νΈλ¦Ό μμ±
package codeStates.stream;
import java.util.Random;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
//μμμ μ μ€νΈλ¦Ό μμ±
public class RandomNumberStreamExample {
public static void main(String[] args) {
//무νμΌλ‘ λμ μμ± -> infinite stream
// IntStream ints = new Random().ints();
//1. limitμΌλ‘ μ€νΈλ¦Όμ μ¬μ΄μ¦λ₯Ό μ λ¬ν΄μ κ·Έ λ²μ μ ν -> μμ±ν μμ κ°―μλ₯Ό 5κ°λ‘ μ ν
IntStream ints = new Random().ints(5);
//IntStream ints=new Ranodom().ints().limit(5);
ints.forEach(System.out::println);
System.out.println("-".repeat(60));
DoubleStream doubles = new Random().doubles(10);//10κ°λ‘ μ ν
doubles.forEach(System.out::println);
//2.νΉμ λ²μμ μ μ : range(), rangeClose() -> μμ±ν μμ κ°μ λ²μλ₯Ό μ ν
IntStream intStream1 = IntStream.rangeClosed(1, 10); //-> λλ²νΈκ° ν¬ν¨λμ΄ 1~10κΉμ§μ μ«μ μΆλ ₯
IntStream intStream2 = IntStream.range(1, 10); // -> λλ²νΈ ν¬ν¨λμ§ μμ 1~9κΉμ§ μΆλ ₯.
intStream1.forEach(e-> System.out.print(e+" "));//1 2 3 4 5 6 7 8 9 10
intStream2.forEach(e-> System.out.print(e+" "));//1 2 3 4 5 6 7 8 9
}
}
βμ€νΈλ¦Όμ μ€κ° μ°μ°
μ€νΈλ¦Όμ μ€κ° μ°μ°μμ κ²°κ³Όλ μ€νΈλ¦Όμ λ°ννκΈ° λλ¬Έμ μ¬λ¬ κ°μ μ°μ°μλ₯Ό μ°κ²°νμ¬ μνλ λ°μ΄ν° μ²λ¦¬ μν κ°λ₯
- νν°λ§
- λ§€ν
- μ λ ¬
package codeStates.stream;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.IntStream;
//μ€νΈλ¦Όμ μ€κ° μ°μ°
public class StreamIntermediateOperationExample {
public static void main(String[] args) {
//1. distince : μ€λ³΅ μ κ±°
List<String> names = Arrays.asList("κΉμ½λ©", "μ΄μλ°", "κΉν΄μ»€","κΉμ½λ©","λ°ν΄μ»€");
names.stream()
.distinct()
.forEach(element-> System.out.print(element+" "));//κΉμ½λ© μ΄μλ° κΉν΄μ»€ λ°ν΄μ»€
System.out.println("\n"+"-".repeat(60));
//2. filter : 쑰건(λλ€μ Predicate)μ λ§λ λ°μ΄ν°λ€λ§ μ μ νμ¬ λ μμ 컬λ μ
λ§λ€μ΄λ
names.stream()
.filter(element -> element.startsWith("κΉ"))
.forEach(element -> System.out.print(element+" "));//κΉμ½λ© κΉν΄μ»€ κΉμ½λ©
System.out.println("\n"+"-".repeat(60));
names.stream()
.distinct()
.filter(element -> element.startsWith("κΉ"))
.forEach(element -> System.out.print(element+" "));//κΉμ½λ© κΉν΄μ»€
System.out.println("\n"+"-".repeat(60));
//2. map : μνλ νλλ§ μΆμΆνκ±°λ νΉμ ννλ‘ λ³νν λ μ¬μ©
List<String> students = Arrays.asList("Amy", "James", "Sara");
students.stream()
.map(element -> element.toUpperCase())
.forEach(System.out :: print); //AMYJAMESSARA
System.out.println("\n"+"-".repeat(60));
List<Integer> list = Arrays.asList(1, 2, 3);
System.out.println(list.stream()
.map(n->n*3)
.mapToInt(e->e)
.average().getAsDouble());
System.out.println("-".repeat(60));
//flatMap() : μ€μ²© ꡬ쑰λ₯Ό μ κ±°νκ³ λ¨μΌ 컬λ μ
μΌλ‘ λ§λ€μ΄μ€.
String[][] namesArray = new String[][]{{"λ°ν΄μ»€", "μ΄μλ°"}, {"κΉμ½λ©", "λλ°μ¬"}};
//κΈ°μ‘΄ λ°©μ
Arrays.stream(namesArray)
.map(e-> Arrays.stream(e))
.forEach(name -> name.forEach(System.out::print));//λ°ν΄μ»€μ΄μλ°κΉμ½λ©λλ°μ¬
System.out.println("\n"+"-".repeat(60));
//flatMap
Arrays.stream(namesArray).
flatMap(Arrays::stream)
.forEach(System.out::print);//λ°ν΄μ»€μ΄μλ°κΉμ½λ©λλ°μ¬
System.out.println("\n"+"-".repeat(60));
//3.sorted() : ()μμ ComparatorλΌλ μΈν°νμ΄μ€μ μ μλ static λ©μλ or default λ©μλλ₯Ό μ¬μ©νμ¬ κ°νΈνκ² μ λ ¬
List<String> animals = Arrays.asList("Tiger", "Lion", "Monkey", "Duck");
//μΈμκ° μλ sort() νΈμΆ -> μ€λ¦μ°¨μμΌλ‘ μ λ ¬
animals.stream().sorted().forEach(System.out::print);//DuckLionMonkeyTiger
System.out.println("\n"+"-".repeat(60));
//μμμΌλ‘ μ λ ¬
animals.stream().sorted(Comparator.reverseOrder()).forEach(System.out::print);//TigerMonkeyLionDuck
System.out.println("\n"+"-".repeat(60));
//λ¬Έμμ΄ κΈΈμ΄μμΌλ‘ μ λ ¬(μ€λ¦μ°¨μ)
animals.stream().sorted((a,b)->a.length()-b.length()).forEach(System.out::print);//LionDuckTigerMonkey
System.out.println("\n"+"-".repeat(60));
//4.skip(int n) : nκ°μ μ«μλ₯Ό 건λλ°κ³
IntStream intStream1 = IntStream.rangeClosed(1, 10);
intStream1.skip(5).forEach(System.out::print);//678910
System.out.println("\n"+"-".repeat(60));
//5.limit(int n) : nκ°μ μ«μκΉμ§
IntStream intStream2 = IntStream.rangeClosed(1, 10);
intStream2.limit(5).forEach(System.out::print);//12345
System.out.println("\n"+"-".repeat(60));
//6.peek(action) : μμλ€μ μννλ©° νΉμ μμ
(action) μν
IntStream intStream3 = IntStream.of(1,2,3,4,5);
int sum=intStream3.filter(e->e%2==0)
.peek(System.out::print)
.sum();
System.out.println("ν©κ³ : "+sum);//24ν©κ² : 6 -> μ§μλ§ νν°λ§ν΄μ ν©κ³ ꡬνκΈ°
}
}
βμ€νΈλ¦Ό μ΅μ’ μ°μ°
- κΈ°λ³Έ μ§κ³
- λ§€μΉ
- μμ μλͺ¨
- μμ μμ§
-κΈ°ν
package codeStates.stream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.OptionalDouble;
import java.util.stream.Collectors;
//μ€νΈλ¦Ό μ΅μ’
μ°μ°
public class StreamTerminalOperation {
public static void main(String[] args) {
//1.κΈ°λ³Έ μ§κ³
int[] intArray = {1, 2, 3, 4, 5};
//μΉ΄μ΄ν
long count= Arrays.stream(intArray).count();
System.out.println("count : " + count);
//ν©κ³
long sum = Arrays.stream(intArray).sum();
System.out.println("sum : " + sum);
//νκ·
double average = Arrays.stream(intArray).average().getAsDouble();
System.out.println("average : " + average);
//νκ· -> getAsDouble()μ μ΅μ’
μ°μ°κ³Όλ κ΄κ³ μλ€! μλ£νμ λ³νν΄μ€ λΏ
OptionalDouble average2 = Arrays.stream(intArray).average();
System.out.println(average2);//OptionalDouble[3.0]
double result = average2.getAsDouble();
System.out.println("average2 : "+result);//average2 : 3.0
//μ΅λκ°
int max = Arrays.stream(intArray).max().getAsInt();
System.out.println("max : " +max);
//μ΅μκ°
int min = Arrays.stream(intArray).min().getAsInt();
System.out.println("min : " + min);
//λ°°μ΄μ 첫 λ²μ§Έ μμ
int first = Arrays.stream(intArray).findFirst().getAsInt();
System.out.println("first element : "+first);
System.out.println("-".repeat(60));
//2.λ§€μΉ : 쑰건μ λλ€ Predicateλ₯Ό λ§€κ°λ³μλ‘ λ겨 μ€νΈλ¦Όμ κ° λ°μ΄ν° μμλ€μ΄ νΉμ 쑰건μ λ§μ‘±νλμ§ μ¬λΆλ₯Ό booleanμΌλ‘ 리ν΄
int[] intArray2 = {2, 4, 6};
//allMatch()
boolean isAllEven=Arrays.stream(intArray2).allMatch(e->e%2==0);
System.out.println("μμ λͺ¨λ 2μ λ°°μμΈκ°? " + isAllEven);//true
//noneMatch()
boolean isAllNotEven=Arrays.stream(intArray2).noneMatch(e->e%2==0);
System.out.println("μμ λͺ¨λ 2μ λ°°μκ° μλκ°? "+isAllNotEven);//false
//anyMatch()
boolean isAnyEven = Arrays.stream(intArray2).anyMatch(e -> e % 2 == 0);
System.out.println("μμ μ€ νλλΌλ 2μ λ°°μκ° μλκ°? "+isAnyEven);//true
System.out.println("-".repeat(60));
//3. reduce() : μ€νΈλ¦Όμ μμλ₯Ό μ€μ¬λκ°λ©΄μ μ°μ°μΌ μννκ³ μ΅μ’
κ²°κ³Ό λ°ν
int[] intArray3 = {1, 2, 3, 4, 5};
//μ΄κΈ°κ°μ΄ μλ reduce()
int sum2 = Arrays.stream(intArray3)
.map(e -> e * 2)
.reduce((a, b) -> a + b)
.getAsInt();
System.out.println("μ΄κΈ°κ°μ΄ μλ reduce() : " + sum2);
//μ΄κΈ°κ°μ΄ μλ reduce()
int sum3=Arrays.stream(intArray3)
.map(e->e*2)
.reduce(5, (a,b)->a+b);
System.out.println("μ΄κΈ°κ°μ΄ μλ reduce() : " + sum3);
System.out.println("-".repeat(60));
//4.collect() : μ€νΈλ¦Ό μμλ€μ List, Set, Map λ± λ€λ₯Έ νμ
μ κ²°κ³Όλ‘ μμ§νκ³ μΆμ κ²½μ°.
List<Student> totalList = Arrays.asList(
new Student("κΉμ½λ©", 100, Student.Gender.Male),
new Student("λ°ν΄μ»€", 90, Student.Gender.Male),
new Student("μ΄μλ°", 80, Student.Gender.Female),
new Student("κΉμλ°", 100, Student.Gender.Male),
new Student("λ°μλ°", 70, Student.Gender.Female)
);
//μ€νΈλ§ μ°μ° κ²°κ³Όλ₯Ό MapμΌλ‘ λ³ν
Map<String, Integer> maleMap = totalList.stream()
.filter(s -> s.getGender() == Student.Gender.Male)
.collect(Collectors.toMap(
student -> student.getName(),
student -> student.getScore()
));
System.out.println(maleMap);//{κΉμ½λ©=100, κΉμλ°=100, λ°ν΄μ»€=90}
//μ€νΈλ§ μ°μ° κ²°κ³Όλ₯Ό Listλ‘ λ³ν
List<String> femaleList=totalList.stream()
.filter(s->s.getGender()==Student.Gender.Female)
.map(e->e.toString())
.collect(Collectors.toList());
System.out.println(femaleList);//[μ΄μλ°'s score : 80 Gender : Female, λ°μλ°'s score : 70 Gender : Female]
}
}
class Student{
public enum Gender {Male, Female};
private String name;
private int score;
private Gender gender;
public Student(final String name, final int score, final Gender gender) {
this.name = name;
this.score = score;
this.gender = gender;
}
public String getName() {
return this.name;
}
public int getScore() {
return this.score;
}
public Gender getGender() {
return this.gender;
}
@Override
public String toString() {
return getName() + "'s score : " + getScore() + " Gender : " + getGender();
}
}
'SEB TILπ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Section1 - KPT νκ³ (1) | 2023.03.13 |
---|---|
TIL - μ€λ λ, JVM, GC (0) | 2023.03.10 |
TIL - JCK(Java Collection Framework μ°μ΅λ¬Έμ ) (0) | 2023.03.07 |
TIL - Enum, Generic, μμΈμ²λ¦¬,JCK (0) | 2023.03.06 |
TIL - μμ‘΄μ± μ£Όμ μμ (0) | 2023.03.03 |