【사내 연구회】Java의 기초 ~ 람다식과 Stream API ~ (2017/07/13)
0. 소개
전하고 싶은 것
전제 지식
참고도서
"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) {
// クリック時の処理
}
});
함수형 인터페이스의 대체로 사용
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)
);
//Androidで、クリックイベントを設定する場合の書き方
findViewById(R.id.hogehoge).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// クリック時の処理
}
});
람다 식의 기본 문법
(引数) -> { 処理}
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」.
List<Integer> list = Arrays.asList(100, 60, 30, 50, 70);
list.stream() //Streamインスタンス生成
.filter(s -> s>=70) //中間操作。//70以上を抽出。
.forEach(s -> System.out.println(s)); //終端操作。
Stream API 분류
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도. . .
Reference
이 문제에 관하여(【사내 연구회】Java의 기초 ~ 람다식과 Stream API ~ (2017/07/13)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuji38kwmt/items/3de3ed419fb24c57ab74텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)