ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java8 - stream(์ŠคํŠธ๋ฆผ), forEach(), map(), filter(), Method Reference(๋ฉ”์†Œ๋“œ ์ฐธ์กฐ)
    ๊ฐœ๋ฐœ/Java 2022. 4. 30. 00:20

    stream์ด๋ผ๋Š” ์˜์–ด ๋‹จ์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.

    1. ๊ฐœ์šธ, ์‹œ๋‚ด

    2. (์•ก์ฒด๋‚˜ ๊ธฐ์ฒด์˜) ์ค„๊ธฐ

    3. (์‚ฌ๋žŒ์ด๋‚˜ ์ฐจ๋Ÿ‰๋“ค๋กœ ๊ณ„์† ์ด์–ด์ง„) ์ค„

     

    ์œ„์˜ ์˜๋ฏธ๋กœ ๋ณด์•˜์„ ๋•Œ, "์ค„์ค„์ด ์ด์–ด์ ธ ์žˆ๋Š”" ์˜๋ฏธ๋กœ ์‚ฌ์šฉ์ด ๋œ๋‹ค.

     

    ๐Ÿ’ก์ž๋ฐ”์˜ ์ŠคํŠธ๋ฆผ์€ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

    ์ž๋ฐ”์˜ ์ŠคํŠธ๋ฆผ์€ "๋ญ”๊ฐ€ ์—ฐ์†๋œ ์ •๋ณด"๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

    ์ž๋ฐ”์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ์ปฌ๋ ‰์…˜์„ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐฐ์—ด์—์„œ๋Š” ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

     

    cf) ๊ทธ๋ ‡์ง€๋งŒ, ๋ฐฐ์—ด์„ ์ปฌ๋ ‰์…˜์˜ List๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. 

     

    1) asList() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•œ ๋ณ€ํ™˜

     

    Integer[] values = {1, 3, 5};
    List<Integer> list = new ArrayList<Integer>(Arrays.asList(values));

     

    2) Arrays.stream() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•œ ๋ณ€ํ™˜

    : ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Stream๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

     

    Integer[] values = {1, 3, 5};
    //stream๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ, collect๋Š” ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋‹ค.
    List<Integer> list = Arrays.stream(values).collect(Collectors.toList());

     

     

    ๊ทธ๋Ÿผ, ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

     

    ๐Ÿ’ก์ž๋ฐ”์˜ ์ŠคํŠธ๋ฆผ์˜ ๊ตฌ์กฐ๋Š” ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์„๊นŒ? (์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„ ์„ค๋ช…)

     

    list.stream().filter(x-> x>10).count()

    - ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ : ์ปฌ๋ ‰์…˜์˜ ๋ชฉ๋ก์„ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋Š” java.util.stream ํŒจํ‚ค์ง€์˜ Stream ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งํ•œ๋‹ค. ์ด stream() ๋ฉ”์†Œ๋“œ๋Š” ๋‹น์—ฐํžˆ Collection ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. stream()์€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. (10๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, 0~9๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•œ๋‹ค.)

     

    - ์ค‘๊ฐœ ์—ฐ์‚ฐ : ์ƒ์„ฑ๋œ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๊ฐœ ์—ฐ์‚ฐ ๋ถ€๋ถ„์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๋ถ€๋ถ„์—์„œ๋Š” ์•„๋ฌด๋Ÿฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ค‘๊ฐœ ์—ฐ์‚ฐ(intermediate operation)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ค‘๊ฐœ ์—ฐ์‚ฐ์€ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

     

    - ์ข…๋‹จ ์—ฐ์‚ฐ : ๋งˆ์ง€๋ง‰์œผ๋กœ ์ค‘๊ฐœ ์—ฐ์‚ฐ์—์„œ ์ž‘์—…๋œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•ด ์ค€๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ถ€๋ถ„์„ ์ข…๋‹จ ์—ฐ์‚ฐ(terminal operation)์ด๋ผ๊ณ  ํ•œ๋‹ค. 

     

     

     

    ์ŠคํŠธ๋ฆผ์—์„œ๋Š” ๋งŽ์€ ์ข…๋ฅ˜์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” forEach(), map(), filter() ์ •๋„๋งŒ ๋ณผ ์˜ˆ์ •์ด๋‹ค. ์ด ์„ธ๊ฐ€์ง€ ์ฃผ์š” ๋ฉ”์„œ๋“œ๋“ค์„ ํ†ตํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ์ตํ˜€๋ณด์ž.

     

     

     

    ๐Ÿ’กforEach()

    forEach()๋Š” ์ข…๋‹จ ์—ฐ์‚ฐ์— ์†ํ•œ๋‹ค. 

    ํ•™์ƒ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” StudentDTOํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ํ•ด๋‹น ํด๋ž˜์Šค์— ๊ฐ๊ฐ ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , printStudentNames ๋ฉ”์„œ๋“œ๋ฅผ ๋™ํ•ด ํ•™์ƒ์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ์ฃผ์„์„ ์ฐธ๊ณ ํ•˜์ž.

     

    package stream;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class StudentForEachSample {
    
        public static void main(String[] args) {
            StudentForEachSample sample = new StudentForEachSample();
            List<StudentDTO> studentList = new ArrayList<>();
            studentList.add(new StudentDTO("์š”๋‹ค", 43, 99, 10));
            studentList.add(new StudentDTO("๋งŒ๋‘", 30, 71, 85));
            studentList.add(new StudentDTO("์ฐ๋นต", 32, 81, 75));
            sample.printStudentNames(studentList);
        }
    
        public void printStudentNames(List<StudentDTO> studentList) {
        
            //1) DTO List์—์„œ forEach๋ฅผ ํ†ตํ•ด์„œ ๊ฐ๊ฐ์˜ DTO๋ฅผ ๋ฝ‘์•„๋‚ด์„œ, ๋ณ€์ˆ˜์— ๋‹ด์•„์„œ, ๊ฑ”์˜ getName์„ ์ถœ๋ ฅ
            studentList.stream().forEach(student -> System.out.println(student.getName()));
             //2) DTO List๋ฅผ List<String>์˜ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์„œ forEach๋กœ ๋ฝ‘๋Š”๋‹ค.
             //์—ฌ๊ธฐ์„œ map()์€ "๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜" ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
            studentList.stream().map(student -> student.getName()).forEach(name -> System.out.println(name));
           
        }
    }

     

    ์ฐธ๊ณ ๋กœ ์ฃผ์„์—์„œ 2๋ฒˆ์˜ map๊ณผ forEach์˜ ์ถœ๋ ฅ ๋ฌธ์žฅ์€ ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

     

    map(StudentDTO::getName)
    forEach(System.out::println)

     

    ์ฒ˜์Œ๋ณด๋Š” "๋”๋ธ” ์ฝœ๋ก (::)"์ด ๋‚˜์™”๋‹ค. ์ด ์—ญ์‹œ Java 8์—์„œ ์ถ”๊ฐ€๋œ ๊ฒƒ์ธ๋ฐ, ์ด ๋”๋ธ” ์ฝœ๋ก ์€ Method Reference๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ฆ‰, ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

     

    ์—ฌ๊ธฐ์— ๋Œ€ํ•ด์„œ๋„ ์‚ดํŽด๋ณด๊ณ  ๊ฐ€๋„๋ก ํ•˜์ž.

     

    ๐Ÿ’กMethod Reference

    ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ๋Š” 4๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

     

    ์ข…๋ฅ˜ ์˜ˆ
    static ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ ContainingClass::staticMethodName
    ํŠน์ • ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ ContainingObject::instanceMethodName
    ํŠน์ • ์œ ํ˜•์˜ ์ž„์˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ ContainingType::methodName
    ์ƒ์„ฑ์ž ์ฐธ์กฐ ClassName::new

     

    ๐Ÿ“Œstatic ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ

     

    package stream;
    
    import java.util.stream.Stream;
    
    public class MethodReferenceSample {
        public static void main(String[] args) {
            MethodReferenceSample sample = new MethodReferenceSample();
            String[] stringArray = {"์š”๋‹ค", "๋งŒ๋‘", "์ฐ๋นต"};
            sample.staticReference(stringArray);
        }
        private static void printResult(String value){
            System.out.println(value);
        }
    
        private void staticReference(String[] stringArray) {
            Stream.of(stringArray).forEach(MethodReferenceSample::printResult);
        }
    }

     

    staticReference() ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณด๋ฉด forEach()๋‚ด์—์„œ MethodReferenceSample::printResult๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” String์˜ ์ŠคํŠธ๋ฆผ์ด๊ธฐ ๋•Œ๋ฌธ์— forEach() ๋ฌธ์žฅ ์•ˆ์—์„œ๋Š” String์„ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋ž˜์„œ printResult() ๋ฉ”์†Œ๋“œ์—์„œ๋Š” String ๊ฐ’์„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ด์ฒ˜๋Ÿผ ์ฐธ์กฐํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    ๐Ÿ“ŒํŠน์ • ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์ฐธ๊ณ 

     

    ์ธ์Šคํ„ด์Šค ์ฐธ์กฐ๋Š” System.out::println๊ณผ ๊ฐ™์ด System ํด๋ž˜์Šค์— ์„ ์–ธ๋œ out ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ณ , ๊ทธ out๋ณ€์ˆ˜์— ์žˆ๋Š” println() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ "๋ณ€์ˆ˜์— ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ"์„ ์˜๋ฏธํ•œ๋‹ค.

     

     

    ๐Ÿ“ŒํŠน์ • ์œ ํ˜•์˜ ์ž„์˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ

     

    private void objectReference(String[] stringArray) {
    	Arrays.sort(stringArray, String::compareToIgnoreCase); //์ž„์˜ ๊ฐ์ฒด ์ฐธ์กฐ
    	Arrays.asList(stringArray).stream().forEach(System.out::println); //์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ
    }

     

    ์œ„์˜ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, String::compareToIgnoreCase๋ผ๊ณ  ์ ํ˜€ ์žˆ๋Š”๋ฐ, ์œ„์—์„œ ๋ณธ ๊ฒƒ ์ฒ˜๋Ÿผ static ์ฐธ์กฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, compareToIgnoreCase() ๋ฉ”์†Œ๋“œ๋Š” ์‚ฌ์‹ค ์ด๋ ‡๊ฒŒ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

     

    public int compareToIgnoreCase(String str) {
    	return CASE_INSENSITIVE_ORDER.compare(this, str);
    }

     

    ๋‹ค์‹œ ๋งํ•ด, static ๋ฉ”์†Œ๋“œ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ, ์ด์™€ ๊ฐ™์ด ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

     

     

    ๐Ÿ“Œ์ƒ์„ฑ์ž ์ฐธ์กฐ

     

    interface MakeString {
    	String fromBytes(char[] chars);
    }
    private void createInstance() {
    	MakeString makeString = String::new;
        char[] chars = {'G', 'o', 'd', 'O', 'f', 'J', 'a', 'v', 'a'};
        String madeString = makeString.fromBytes(chars);
        System.out.println(madeString);
    }

     

    ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด MakeString makeString = String::new; ๋ผ๋Š” ๋ถ€๋ถ„์ด ๋ณด์ธ๋‹ค. ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” String์˜ ์ƒ์„ฑ์ž ์ค‘์—์„œ char[]์„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

     

    ๋ฌผ๋ก  String์„ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„๋“ค์€ ๋ณ„๋กœ ์—†๊ฒ ์ง€๋งŒ, ํ•„์š”์— ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ƒ์„ฑ์ž๋ฅผ ์ž…๋ง›๋Œ€๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์–ด ๋†’์„ ์ˆ˜ ์žˆ๋‹ค.

     

     

     

    ๐Ÿ’กmap()

    map()์€ ์ค‘๊ฐœ ์—ฐ์‚ฐ์— ์†ํ•œ๋‹ค. 

    ์„ค๋ช…์— ์•ž์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ , intList์— ์žˆ๋Š” ๋‚ด์šฉ๋“ค์„ ๋ชจ๋‘ 3๋ฐฐ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ŠคํŠธ๋ฆผ์„ ์ด์šฉํ•ด ์ž‘์„ฑํ•ด๋ณด์ž.

     

    List<Integer> intList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);

     

    ์ •๋‹ต

     

    intList.stream().forEach(value -> System.out::println(value * 3));

     

    ๐Ÿ“Œ๊ทธ๋ ‡๋‹ค๋ฉด, 3๋ฐฐ๋กœ ๋ณ€ํ™˜๋œ ๊ฐ’๋“ค์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข‹์„๊นŒ?

    ์ด๋Ÿฐ ๊ฒฝ์šฐ, ์ŠคํŠธ๋ฆผ์˜ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณ€ํ™˜ํ•ด ๋ฒ„๋ฆฌ๋Š” map()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

     

    intList.stream().map(x->x*3).forEach(System.out::println);

     

    ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉด ์ด๋ ‡๋‹ค.

     

     

    map()์œผ๋กœ ๋ณ€ํ™˜์ด ๋˜๋Š” ์ˆœ๊ฐ„ ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์˜ ๋‹ค์Œ ๊ตฌ๋ฌธ์— ์žˆ๋Š” ๋‚ด์šฉ๋“ค์ด ๋ฐ”๋€Œ์–ด ๋ฒ„๋ฆฐ๋‹ค.

    ์ฆ‰, ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ŠคํŠธ๋ฆผ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ’๋“ค์„ ์ค‘๊ฐ„์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด map()์€ ์ˆซ์ž๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด๋„ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

     

     

    ๊ทธ๋Ÿผ ๋งˆ์ง€๋ง‰์œผ๋กœ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ŠคํŠธ๋ฆผ์„ ์ด์šฉํ•ด ์ด๋ฆ„๋งŒ์„ List๋กœ ๋ฝ‘์•„ ๋‚ด๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.

    (ํžŒํŠธ: ์ข…๋‹จ ์—ฐ์‚ฐ์—๋Š” ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ด์„ ํ•ด์ฃผ๋Š” collect๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•œ๋‹ค. collect(Collectors.toList());

     

    List<StudentDTO> studentList = new ArrayList<>();
    studentList.add(new StudentDTO("์š”๋‹ค", 43, 99, 10));
    studentList.add(new StudentDTO("๋งŒ๋‘", 30, 71, 85));
    studentList.add(new StudentDTO("์ฐ๋นต", 32, 81, 75));

     

    ์ •๋‹ต

     

    List<String> nameList = studentList.stream()
    	.map(student -> student.getName()).collect(Collectors.toList());

     

    ๐Ÿ’กfilter()

    filter๋ผ๋Š” ๋‹จ์–ด๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค๋Š” ๋œป์œผ๋กœ ์“ฐ์ธ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์›น ์š”์ฒญ๋“ค์„ ๊ฑธ๋Ÿฌ๋‚ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

     

    package stream;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class StudentFilterSample {
    
        public static void main(String[] args) {
            StudentFilterSample sample = new StudentFilterSample();
            List<StudentDTO> studentList = new ArrayList<>();
            studentList.add(new StudentDTO("์š”๋‹ค", 43, 99, 10));
            studentList.add(new StudentDTO("๋งŒ๋‘", 30, 71, 85));
            studentList.add(new StudentDTO("์ฐ๋นต", 32, 81, 75));
            sample.filterWithScoreForLoop(studentList, 80);
        }
    
        public void filterWithScoreForLoop(List<StudentDTO> studentList, int scoreCutLine) {
           for(StudentDTO student:studentList) {
           	if(student.getScore()>scoreCutLine) {
            	System.out.println(student.getName());
            }
           }
        }
    }

     

    ์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” filterWithScoreForLoop๋ฅผ ํ†ตํ•ด 80์  ์ด์ƒ์˜ ์ ์ˆ˜๋ฅผ ๊ฐ–๋Š” ์‚ฌ๋žŒ๋งŒ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜์˜จ๋‹ค.

     

    studentList.stream()
    	.filter(student -> student.getScoreMath() > scoreCutLine)
    	.forEach(student -> System.out.println(student.getName()));

     

    studentList๋ฅผ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ํ•˜๊ณ , ๊ฐœ๋ณ„ ํ•™์ƒ์˜ ์ ์ˆ˜๊ฐ€ scoreCutLine๋ณด๋‹ค ํฐ ํ•™์ƒ๋งŒ ๊ทธ ๋ฐ‘์— forEach() ๊ตฌ๋ฌธ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ๋Š” ์•ž์„œ for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

     

    ์ฆ‰, filter๋Š” if๋ฌธ์ฒ˜๋Ÿผ ์ŠคํŠธ๋ฆผ ๋‚ด์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑธ๋Ÿฌ์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

     

     

     

    ๐Ÿ’ก์ •๋ฆฌํ•˜๋ฉฐ

    ์‹ค์ œ๋กœ ํ˜„์—…์—์„œ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ, ๋žŒ๋‹คํ‘œํ˜„์‹์ด๋‚˜ ์ŠคํŠธ๋ฆผ์„ ์จ๋ณธ์ ์€ ์—†๋‹ค๋ณด๋‹ˆ(์•ž์œผ๋กœ ์ƒ๊ธธ์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ), ํ•ด๋‹น ๊ธ€์„ ์ฝ๋Š”๋ฐ ๋‹น์žฅ ์‚ฌ์šฉํ•  ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋‹ค๋ณด๋‹ˆ, ๋ฌด์–ธ๊ฐ€ ์™€๋‹ฟ์ง€์•Š์Œ(?)์œผ๋กœ ์ธํ•ด ์ฝํžˆ์ง€ ์•Š์•„ ํ•˜๋ฃจ์ข…์ผ ๊ณ ์ƒํ–ˆ๋‹ค.. ๊ทธ๋ž˜๋„ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌ๋ฅผ ํ•˜๋ฉด, ์ข€ ์ฝํž ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ ‡๊ฒŒ ์ •๋ฆฌ๋ฅผ ํ•˜๋ฉฐ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ, ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ๋ชจ๋ฅด๊ณ  ์žˆ๋Š”๊ฒƒ์— ๋Œ€ํ•œ ์ฐจ์ด๋Š” ํฌ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋˜ ์ฑ…์—์„œ ์ ํžŒ ๋‚ด์šฉ ์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ์ต์ˆ™ํ•ด์ง€๋ฉด ํŽธํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๋Š” ์žฅ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค :)

     

     

    ๐Ÿ“—Reference

    - ์ž๋ฐ”์˜ ์‹ 

    ๋Œ“๊ธ€

Designed by Tistory.