조회 수 13 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

자바 8 에서 람다식이 나오면서 stream 인터페이스가 나왔습니다. stream 인터페이스를 사용하여 람다식을 기존 JAVA코드(명령형 스타일)와 비교해보겠습니다.

아래에 소개하는 4개의 메서드를 간단히 설명하면 
map()은 엘리먼트 변경, filter()는 엘리먼트 선택, reduce(), collect()는 엘리먼트를 하나로 리턴 이다.

1. map()
map 메서드는 입력 컬렉션을 출력 컬렉션으로 매핑하거나 변경할때 유용하다.

예제 코드
list의 엘리먼트 값을 모두 대문자로 변경하여 출력.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
final List<String> names = Arrays.asList("Sehoon""Songwoo""Chan""Youngsuk""Dajung");
            //java 7
            System.out.println("java 7");
            for(String name : names) {
                System.out.println(name.toUpperCase());
            }
 
            System.out.println("");
 
            //java 8 Lambda
            System.out.println("java 8");
            names.stream()
                .map(name -> name.toUpperCase())
                .forEach(name -> System.out.println(name));


java 7
SEHOON
SONGWOO
CHAN
YOUNGSUK
DAJUNG

java 8
SEHOON
SONGWOO
CHAN
YOUNGSUK
DAJUNG

 

출력


2. filter()
filter 메서드는 컬렉션을 조건에 의한 선택을 할때 유용하다. filter 메서드는
boolean 결과를 리턴하는 람다표현식이 필요하다.
예제의 collection 메서드는 filter 표현식에 나온값을 list로 변경한다. 

예제 코드
'S' 로 시작하는 이름을 출력.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        final Listt<String> names = Arrays.asList("Sehoon""Songwoo""Chan""Youngsuk""Dajung");
 
        //java 7
        System.out.println("java 7");
        final List<string> startsWithN1 = new ArrayList<string>();
        for (String name : names) {
            if (name.startsWith("S")) {
                startsWithN1.add(name);
            }
        }
 
        System.out.println(startsWithN1);
 
        System.out.println("");
 
        //java 8 Lambda
        System.out.println("java 8");
        final List<string> startsWithN2 = 
                names.stream().filter(name -> name.startsWith("S"))
                                .collect(Collectors.toList());
 
        System.out.println(startsWithN2);
</string></string></string>


출력

java 7
[Sehoon, Songwoo]

java 8
[Sehoon, Songwoo]



3. reduce()
reduce 메서드는 엘리먼트를 비교하고 컬렉션에서 하나의 값으로 연산한다.
람다 예제 소스를 보면 첫번째로 리스트에 있는 처음 두개 엘리먼트를 사용한다. 그리고 람다 표현식의 결과는 다음호출에 사용된다. 두번째 호출에서는 name1은 이전 호출의 결과이며 name2는 컬렉션의 세번째 엘리먼트 이다.

예제코드
특정 스트링값의 길이보다 크고, 리스트의 가장 긴이름을 가진 엘리먼트를 출력.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
final List<String> names = Arrays.asList("Sehoon""Songwoo""Chan""Youngsuk""Dajung");
 
//java 7
String LongerEliment1  = "";
for (String name : names) {
    if(("hoone".length() <= name.length()) && (LongerEliment1.length() <= name.length())) {
        LongerEliment1 = name;
    }
}
 
System.out.println("java 7 "+LongerEliment1);
 
//java 8 Lambda
String LongerEliment2 = names.stream()
        .reduce("hoone", (name1, name2) ->
            name1.length() >= name2.length() ? name1 : name2);
System.out.println("java 8 "+LongerEliment2);

출력

java 7 Youngsuk
java 8 Youngsuk


4. collect()
collect 메서드는 reduce() 메서드와 동일하게 값을 하나로 모으는 다른형태인데, collect는 여러 convenience method를 제공한다.
아래 예제는 리스트의 엘리먼트를 콤마로 구분하여 출력하는데, 기존 for문으로는 마지막 엘리먼트에 콤마를 안붙이는게 쉽지는 않다. 하지만 collect 머서드를 사용하면 간단하게 만들 수 있다.

예제코드
리스트의 엘리먼트를 콤마로 구분하여 출력. 단 마지막 엘리먼트에 콤마가 없어야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
final List<String> names = Arrays.asList("Sehoon""Songwoo""Chan""Youngsuk""Dajung");
 
System.out.println("java 7");
//java 7
for(int i = 0; i < names.size() - 1; i++) {
    System.out.print(names.get(i).toUpperCase() + ", ");
}
 
if(names.size() > 0) {
    System.out.println(names.get(names.size() - 1).toUpperCase());
}
 
System.out.println("java 8");
//java 8 Lambda
System.out.println(names.stream()
            .map(String::toUpperCase)
            .collect(Collectors.joining(", ")));


출력

java 7
SEHOON, SONGWOO, CHAN, YOUNGSUK, DAJUNG

java 8
SEHOON, SONGWOO, CHAN, YOUNGSUK, DAJUNG



Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
» JAVA [JAVA] 람다식 기본 예제 1 (map, filter, reduce, collect) 2022.11.04 13 0
498 PHP [MySQL] 뷰 생성하기(VIEW 생성하기) 2022.10.12 15 0
497 PHP sQL:: JOIN, UNION 사용법 2022.09.05 17 0
496 PHP SQL :: EXIST , NOT EXIST 2022.09.05 18 0
495 업무 Back-End 관련 정보 2022.05.17 105 0
494 C# C#의 $으로 문자열 보간하기 2022.04.28 378 0
493 일반 3D프린트 가이드 모음 2022.04.02 319 0
492 일반 프리미어 프로 Premier Pro secret 2022.02.04 0 0
491 Android [Git] git add 취소하기, git commit 취소하기, git push 취소하기 2021.09.30 3184 0
490 일반 엑셀 Excel 데이터 시각화 (엑셀 사용 Tip) 2021.08.25 1160 0
489 Android 안드로이드 스마트 폰 화면 미러링: scrcpy 사용법 2021.08.18 19889 0
488 일반 Cakewalk 단축키 정리 2021.07.20 1600 0
487 일반 Cakewalk secret 2021.07.20 0 0
486 C# C# JSON 파싱(parsing): Newtonsoft 및 System.Text.Json 2021.05.15 7142 0
485 C# C# ?? 및 ??=, ?. 연산자 2021.05.09 1534 0
목록
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 10 ... 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5