- 자료의 대상과 관계없이 동일한 연산을 수행할 수 있게 하는 기능 (자료의 추상화)
- Array, Collection에 동일한 연산이 수행돼서 일관성있는 처리 기능을 갖게한다
- 스트림은 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);
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에 생성된 배열을 넣는다.
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));
위와 같이 붙여서 사용할 수 있다.
직접 연산을 지정할 수 있다.
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 위치는 초기 값, 뒤에는 지정하는 연산자
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한다.