가자미의 개발이야기

[자바] 스트림 활용 메소드 본문

Java/자바 기본 문법

[자바] 스트림 활용 메소드

가자미 2021. 2. 17. 11:24

1. 스트림 생성과 연결

-스트림을 생성과 동시에 원소를 전달하는 of

-static <T> Stream<T> of(T....values)

--double, int, long 형 스트림에도 오버로딩 되어 있음.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
 
public class StreamPtc {
    public static void main(String[] args) {
        Stream.of(11,22,33,44)//4개의 값으로 스트림 생성(원소 4개)
        .forEach(n->System.out.print(n+"\t"));
        System.out.println();
        
        Stream.of("So simple!")//하나의 String인스턴스로 스트림 생성(원소 1개)
        .forEach(s->System.out.print(s+"\t"));
        System.out.println();
        
        List<String> s1 = Arrays.asList("Toy""Robot""Box");
        Stream.of(s1)//하나의 컬렉션 인스턴스로 스트림 생성(원소 1개)
        .forEach(w->System.out.print(w+"\t"));
        System.out.println();
    }
}
cs

-스트림 원소의 범위를 지정하는 range

-static IntStream range(int start, int end) //LongStream도 가능

 

-일반 스트림을 병렬 스트림으로 바꾸는 parallel()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
import java.util.stream.Stream;
 
public class StreamPtc {
    public static void main(String[] args) {
        List<String> ls = Arrays.asList("Toy""Robot""Box");
        Stream<String> ss = ls.stream(); //스트림 생성.
        
        BinaryOperator<String> lc = (s1, s2)->{
            if(s1.length()>s2.length())
                return s1;
            else
                return s2;
        };
        
        String str = ss.parallel()//병렬 스트림 생성
                .reduce("",lc);
        System.out.println(str);
    }
}
cs

-스트림을 연결해주는 concat(Stream<T> s1, Stream<T> s2)

 

2. 스트림 중간연산

- 하나의 입력값으로 여러가지 반환값을 매핑하는 flatmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
import java.util.stream.Stream;
 
public class StreamPtc {
    public static void main(String[] args) {
        Stream<String> ss1 = Stream.of("My_Age""Your_Life");
        
        Stream<String> ss2 = ss1.//람다식에서 스트림을 생성
                flatMap(s->Arrays.stream(s.split("_")));
        
        ss2.forEach(s->System.out.print(s+"\t"));
        System.out.println();
    }
}
cs

-정렬하는 sotred

-Comparable<T>인터페이스를 구현한 인스턴스 대상 .sorted()

-compareTo 메소드에 대상 .sorted((s1, s2)->기준정의)

 

-스트림 원소 하나마다 수행하는 루핑(peek이 대표적)

-peek은 forEach와 기능은 동일하다

-그러나 peek은 중간연산, forEach는 최종연산이다.

-중간 연산은 최종 연산이 없으면 수행하지 않는다.

 

3. 최종 연산

-sum, count는 기본 자료형으로 반환

-average, min, max는 Optional 인스턴스로 반환

-forEach : 원소 하나마다 행동 수행.

 

-원소들이 조건에 맞는지에 따라 T/F 반환하는

-allMatch, anyMatch, noneMatch

-람다로 조건 작성

 

-스트림의 결과물을 따로 저장하는 collect

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
 
public class StreamPtc {
    public static void main(String[] args) {
        String[] words = {"Hello","Box""Robot""Toy"};
        Stream<String> ss = Arrays.stream(words);
        
        List<String> ls = ss.filter(s->s.length()<5)
                .collect(()->new ArrayList<>(),//저장소 생성
                        (c, s)-> c.add(s),// 저장소 인스턴스 c, 스트림 데이터 s
                        (lst1, lst2)-> lst1.addAll(lst2));//순차스트림에선 의미 x
    }
}
cs

병렬의 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
 
public class StreamPtc {
    public static void main(String[] args) {
        String[] words = {"Hello","Box""Robot""Toy"};
        Stream<String> ss = Arrays.stream(words);
        
        List<String> ls = ss.parallel()//병렬
                .filter(s->s.length()<5)
                .collect(()->new ArrayList<>(),//저장소 생성
                        (c, s)-> c.add(s),// 저장소 인스턴스 c, 스트림 데이터 s
                        (lst1, lst2)-> lst1.addAll(lst2));//나눠졌던 인스턴스를 한 곳에 모음
    }
}
cs

"

 

 

 

 

 

'Java > 자바 기본 문법' 카테고리의 다른 글

[자바] I/O 스트림  (0) 2021.02.26
[자바] 시각과 날짜 관련 코드  (0) 2021.02.19
자바 스트림의 기초  (0) 2021.02.09
자바 Optional 클래스  (0) 2021.02.09
자바 메소드 참조  (0) 2021.02.09