Java Stream

ims·2020년 8월 28일
0

Java 정리 !

목록 보기
2/16

Stream

  1. 자료의 대상과 관계없이 동일한 연산을 수행할 수 있게 하는 기능 (자료의 추상화)
  2. Array, Collection에 동일한 연산이 수행돼서 일관성있는 처리 기능을 갖게한다
  3. 스트림은 1회성이라 한번 사용한 스트림은 재사용 하지 못한다
  4. 스트림은 연산은 기존의 자료를 변경하지 않고, 새로운 메모리 위에서 동작한다
  5. 중간연산과 최종 연산이 구분되며, 최종 연산이 수행되고 나서야 모든 연산이 적용되는 지연연산이다.

예제 1

        List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
        List result = numbers.stream()
                .filter(e -> (e % 2) == 0)
                .map(e -> e * 2)
                .collect(toList());

        System.out.println(result);

예제 2

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

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

System.out.println(sum);
System.out.println(count);

Static method인 Arrays에 제공되는 stream에 생성된 배열을 넣는다.

예제 3

List<String> sList = new ArrayList<>();

sList.add("1번");
sList.add("2번2번");
sList.add("3번3번3번");

Stream<String> stream = sList.stream();
stream.forEach(item-> System.out.println(item));

stream의 생성방법

sList.stream().forEach(item-> System.out.println(item));

위와 같이 붙여서 사용할 수 있다.

reduce

직접 연산을 지정할 수 있다.

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

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

System.out.println(Arrays.stream(arr).reduce(0,(a,b)->a+b));

0 위치는 초기 값, 뒤에는 지정하는 연산자

reduce 활용

String[] stringTest = {"길이가 짧은","길이가 매우우우우우 긴","중간","하하하하하하하"};

System.out.println(Arrays.stream(stringTest).reduce("",new CompareString()));

class CompareString implements BinaryOperator<String>{

    @Override
    public String apply(String s, String s2) {
        if(s.length()>s2.length()){
            return s;
        }else{
            return s2;
        }
    }
}

길이가 가장 긴 배열의 값을 출력하는 코드. BinaryOperator을 상속받은 class를 통해서 method를 override한다.

profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/

0개의 댓글