자료의 연산을 위해 사용하는 객체 ㅡ 스트림
스트림은 한번 수행후에 재활용 불가능 다시 스트림 생성해서 사용
배열의 스트림
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());