(타입 매개변수) -> { 실행문; }
interface ExFunctionInterface {
public void method();
}
//public class ExFunctionInterfaceTest {
// public static void main(String[] args) {
// ExFunctionInterface test = new ExFunctionInterface() {
// public void method() {
// System.out.println("test");
// }
// };
// test.method();
// }
//}
public class ExFunctionInterfaceTest {
public static void main(String[] args) {
ExFunctionInterface test = () -> System.out.println("test");
test.method();
}
}
@FunctionalInterface
라는 어노테이션을 붙일 수 있음중간연산
: 연산 결과가 스트림, 연속해서 수행 가능최종연산
: 연산 결과가 스트림이 아님, 스트림의 요소를 소모하기 때문에 단 한 번만 가능최종연산 | 설명 |
---|---|
void forEach(Consumer <? super T> action) | 각 요소에 지정된 작업 수행 |
long count() | 스트림의 요소 개수 |
Optional < T > max (Comparator <? super T> comparator) | 스트림의 최댓값 |
Optional < T > min (Comparator <? super T> comparator) | 스트림의 최솟값 |
Optional < T > findAny() | 아무거나 하나 |
Optional < T > findFirst() | 첫번째 요소 |
boolean allMatch(Pradicate < T > p) | 모두 만족하는지? |
boolean anyMatch(Pradicate < T > p) | 하나라도 만족하는지? |
boolean noneMatch(Pradicate < T > p) | 모두 만족하지 않는지? |
Object[] toArray() | 스트림의 모든 요소를 배열로 return |
reduce() : 스트림의 요소를 하나씩 줄여가면서 계산
collect() : 스트림의 요소를 수집함, 주로 요소를 그룹화하거나 결과를 컬렉션에 담아 반환하는데 사용됨
List<String> sortedList = strStreamList.sorted().collect(Collectors.toList());
스트림은 데이터 소스로부터 데이터를 읽기만 함. 정렬된 결과가 필요할 경우, collect를 활용해서 컬렉션이나 배열에 담아 return 할 수 있음
List<String> sortedList = strStreamList.sorted().collect(Collectors.toList());
스트림은 한 번 사용하면 닫혀서 다시 사용할 수 없음. 필요하다면 다시 생성해야 함
내부 반복이란 반복문을 메서드 내부에 숨길 수 있다는 것을 의미. forEach()는 스트림에 정의된 메서드 중의 하나로 매개변수에 대입된 람다식을 데이터 소스의 모든 요소에 적용함. 즉 forEach()는 메서드 안에 for 문을 넣은 것임
strStreamArr.sorted().forEach(System.out::println);
최종 연산이 수행되기 전까지는 중간 연산이 수행되지 않음. 중간 연산은 어떤 작업이 수행되어야 하는지 지정해주는 역할일 뿐임.
오토박싱, 언박싱으로 인한 비효율을 줄이기 위해 데이터 소스의 요소를 기본형으로 다루는 IntStream, LongStream, DoubleStream
이 제공됨
// 오토 박싱 - Deprecated
int i = 10;
Integer num = i;
// 오토 언박싱 - Deprecated
Integer num = new Integer(10);
int i = num;
int sum = strStream.parallel().mapToInt(s -> s.length()).sum;