【사내 연구회】Java의 기초 ~ 람다식과 Stream API ~ (2017/07/13)

17034 단어 공부회자바

0. 소개



전하고 싶은 것


  • Java8의 나우에서 유용한 기법을 알아 봅시다

  • 전제 지식


  • Java for 루프, 익명 함수


  • 참고도서




    "Java 본격 입문 ~모던 스타일에 의한 기초로부터 오브젝트 지향·실용 라이브러리까지』기술 평론사

    달리 명시하지 않는 한이 책을 인용합니다.

    목차



    1. 람다식



    람다식이란?



    람다 식은 메소드의 인수 등에 처리 그 자체를 건네줄 수 있는 것 같은, 강력한 기법입니다.

    ※『Java 본격 입문』P151 인용
    List<Integer> list = new ArrayList<Integer>();
    Collections.addAll(list, 3, 2, 1, 4, 5);
    
    //ラムダ式を使わない書き方(無名クラス)
    Collections.sort(list, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return Integer.compare(o1, o2);
        }
    });
    
    //ラムダ式を使った書き方
    Collections.sort(list,
            (o1, o2) -> Integer.compare(o1, o2)
    );
    

    람다 식은 「무명 클래스의 구현 메소드가 간단하게 쓸 수 있다」 뿐이지만, 후술의 Stream API와 조합하면, 알기 쉬운 표기를 할 수 있다.

    [보충] 익명 클래스



    이벤트 리스너 설정에서 자주 사용한다.
    //Androidで、クリックイベントを設定する場合の書き方
    findViewById(R.id.hogehoge).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // クリック時の処理
        }
    });
    

    함수형 인터페이스의 대체로 사용


  • 함수형 인터페이스 : 추상 메소드가 1 개만의 인터페이스
  • [Try] JavaDoc을 확인. JavaDoc Comparator
  • 함수 인터페이스는 람다 표현식으로 대체됩니다


  • 람다 식의 기본 문법


  • 기본 문법: (引数) -> { 処理}
  • 조건에 따라 여러 가지 생략 가능
  • 인수 부분의 형태
  • 인수의 괄호(인수가 1개일 때)
  • return 및 괄호 (처리가 하나 일 때)

  • //ラムダ式の基本文法
    Collections.sort(list,
            (Integer o1, Integer o2) -> {
               return Integer.compare(o1, o2);
            }
    );
    
    //引数の型を省略
    Collections.sort(list,
            (o1, o2) -> {
               return Integer.compare(o1, o2);
            }
    );
    
    //引数の型と、return、波括弧を省略
    Collections.sort(list,
            (o1, o2) -> Integer.compare(o1, o2)
    );
    

    메소드 참조



    메소드 그 자체도 대입할 수 있다.
    List<String> list = Arrays.asList("X", "Y", "Z");
    //メソッド参照を使った書き方
    list.forEach(System.out::println);
    
    //ラムダ式を使った書き方
    list.forEach(str -> System.out.println(str));
    
    forEach 메소드의 인수는 java.util.function.Consumer 라는 함수형 인터페이스.

    2.Stream API



    Stream API란?



    Stream API는 대량 데이터를 순차적으로 처리하는 "스트림 처리"를 효율적으로 설명하는 수단으로 도입되었습니다.

    ※『Java 본격 입문』 P150 인용
    List<Integer> list = Arrays.asList(100, 60, 30, 50, 70);
    
    list.stream() //Streamインスタンス生成
        .filter(s -> s>=70) //中間操作。//70以上を抽出。
        .forEach(s -> System.out.println(s)); //終端操作。
    

    TODO Stream 이미지 표시

    ※ 참고 사이트
    h tp // w w. 오 c. 이 m / ch ch와 rk / jp / archi c ぇ s / 그럼 ゔ ぁ / 마 14- ゔ ぁ - 8-st 어 ms - 2177646 - 그럼. HTML

    Stream API의 특징



    Stream API는 「How가 아니라 What를 기술하는 API」.
  • How: 개별 처리
  • What: 처리 목적
  • Stream API는 루프 처리를 작성하지 않고 목적을 작성합니다.
  • SQL과 같은 생각.


  • Stream API 분류


  • 스트림 생성
  • Stream의 중간 조작
  • Stream의 종단 조작

  • Stream API 목록

    스트림을 만드는 API


    //ListやSetからStreamを作成
    List<Integer> list = Arrays.asList(100, 60, 30, 50, 70);
    list.stream() //Streamインスタンス生成
        .forEach(System.out::println);
    
    
    //数値範囲からStreamを作成
    IntStream.range(1, 5) //末尾を含まない
        .forEach(System.out::println);
    
    IntStream.rangeClosed(1, 5) //末尾を含む
        .forEach(System.out::println);
    
    

    스트림에 대한 중간 조작


    List<Integer> list = Arrays.asList(10, 6, 3, 5, 7);
    
    //map: 要素を別の値に置き換える
    list.stream()
        .map(s -> s * s)
        .forEach(System.out::println);
    
    //filter: 条件に合致した要素のみ絞り込む
    list.stream()
        .filter(s -> s>=7)
        .forEach(System.out::println);
    
    //sort:
    list.stream()
        .sorted((s1,s2) -> s2 - s1) //降順
        .forEach(System.out::println);
    
    

    스트림에 대한 종단 조작


    List<Integer> list = Arrays.asList(10, 6, 3, 5, 7);
    
    //forEach: 要素に対してアクションを実行する
    list.stream()
        .forEach(System.out::println);
    
    //collect: 結果を作成する
    List<Integer> newList = list.stream()
        .filter(s -> s>=7)
        .collect(Collectors.toList());
    
    //average: 平均を返す(集計操作)
    list.stream()
        .average();
    
    

    함수형 언어



    JavaScript도. . .

    좋은 웹페이지 즐겨찾기