[JAVA][패스트캠퍼스]스트림

18863 단어 JavafastcampusJava

스트림 (Stream)

  • 자료의 대상과 관계없이 동일한 연산을 수행할 수 있는 기능 (자료의 추상화)
  • 배열, 컬렉션에 동일한 연산이 수행되어 일관성 있는 처리 가능
  • 한번 생성하고 사용한 스트림은 재사용할 수 없음
  • 스트림 연산은 기존 자료를 변경하지 않음
  • 중간 연산과 최종 연산으로 구분됨
  • 최종 연산이 수행되어야 모든 연산이 적용되는 지연 연산

스트림 연산 - 중간 연산

  • 중간 연산 - filter(), map()
  • 조건에 맞는 요소를 추출(filter())하거나 요소를 변환함(map())
  • 문자열의 길이가 5 이상인 요소만 출력하기
  • 고객 클래스에서 고객 이름만 가져오기

스트림 연산 - 최종 연산

  • 스트림의 자료를 소모하면서 연산을 수행
  • 최종 연산 후에 스트림은 더 이상 다른 연산을 적용할 수 없음
  • forEach() : 요소를 하나씩 꺼내옴
  • count() : 요소의 개수
  • sum() : 요소의 합
  • 이 외에도 여러가지 최종연산이 있음
package stream;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
//스트림연산
public class ArrayListStreamTest {

	public static void main(String[] args) {
		List<String> sList=new ArrayList<String>();
		sList.add("Tomas");
		sList.add("Edward");
		sList.add("Jack");
		
		Stream<String> stream=sList.stream();
		stream.forEach(s->System.out.print(s+" "));
		System.out.println();
		
		//sorted에 의해 자동정렬됨
		sList.stream().sorted().forEach(s->System.out.print(s+" "));
		System.out.println();	
		sList.stream().map(s->s.length()).forEach(n->System.out.println(n));
	
	
	}
}

reduce() 연산

  • 정의된 연산이 아닌 프로그래머가 직접 지정하는 연산을 적용
  • 최종 연산으로 스트림의 요소를 소모하여 연산 수행
  • 배열의 모든 요소의 합을 구하는 reduce()연산
  • 두 번째 요소로 전달되는 람다식에 따라 다양한 기능을 수행

IntArrayTest.java

package stream;

import java.util.Arrays;

public class IntArrayTest {

	public static void main(String[] args) {
		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);
		//reduce를 이용한 모든요소의 합
		System.out.println(Arrays.stream(arr).reduce(0, (a,b)->a+b));
	}
}

ReduceTest.java

package stream;

import java.util.Arrays;
import java.util.function.BinaryOperator;

class CompareString implements BinaryOperator<String>{

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

public class ReduceTest {

	public static void main(String[] args) {
		String[] greetings= {"안녕하세요---","hello","Good morning","반갑습니다"};
		
		//문자열의 길이가 제일긴 문자열반환
		System.out.println(Arrays.stream(greetings).reduce("",(s1,s2)->
		{	if(s1.getBytes().length >= s2.getBytes().length)
			return s1;
		else return s2;
		}));
		
		//간단히 하려면 BinaryOperator인터페이스를 구현한 CompareString클래스를 만들어서 reduce로 출력하는 형식으로 만들면됨
		System.out.println(Arrays.stream(greetings).reduce(new CompareString()).get());
		}
}

좋은 웹페이지 즐겨찾기