본문 바로가기

Java

스트림

반응형

자료의 연산을 위해 사용하는 객체 ㅡ 스트림

 

스트림은 한번 수행후에 재활용 불가능 다시 스트림 생성해서 사용

 

배열의 스트림

int[] arr = {1,2,3,4,5}

int sum = Arrays.stream(arr).sum()

int count = (int)Arrays.stream(arr).count()

count는 long형이므로 int로 바꿔줌

 

 

Collection stream

List list = new ArrayList();

Stream stream = list.stream();

배열과 다르게 컬렉션 스트림은 이렇게 객체로 생성가능

stream.foreach(s->System.out.println(s));

foreach로 하나씩 접근 가능

만약 sort후에 출력이라면
위에 stream 그대로 사용 불가.
새로 생성해야 함

list.stream().sorted().foreach(s->System.out.println(s));

이름의 길이를 구하고 싶다면 map은 요소를 변환시키므로 map사용

원래 이름이 변수였는데 길이로 변수가 변함.

list.stream().map(s->s.length()).foreach(n->System.out.println(n));

filter 조건에 맞는 요소 추출
list.stream().filter(s->s.length()>=5).foreach(n->System.out.println(n));

 

reduce 연산을 직접 정의

Arrays.stream(arr).reduce(0,(a,b)->a+b);
두개의 인자를 더 함

0은 초기 값이므로 0에다가 다음 인자가 더해지고 그 인자가 또 더해지고 반복하면 결국 arr의 모든 인자가 더해짐

 

String[] gr = {“hi”,”bye”,”thanks”}

Arrays.stream(gr).reduce(“ “,(s1,s2)->
{
if(s1.getBytes().length >= s2.getBytes().length)

return s1;

else

return s2;
});


이렇게 하는 방법 혹은


class Compare implements BinaryOperator
{

 @Override
 public String apply(String s1, String s2){

if(s1.getBytes().length >= s2.getBytes().length)

return s1;

else

return s2;
}
한 뒤에
Arrays.stream(gr).reduce(new Compare().get());

 

 

 

반응형

'Java' 카테고리의 다른 글

자바 연습 (스트림)  (0) 2019.11.04
예외 처리  (0) 2019.11.04
람다식  (0) 2019.11.03
익명 클래스  (0) 2019.11.03
내부 클래스  (0) 2019.11.03