Notice
Recent Posts
Link
Tags
- Django
- 문자열
- 스프링
- session
- spring security 6
- PYTHON
- 데이터베이스
- Git
- string
- Docker
- sql
- 프로그래머스
- @transactional
- springboot
- DI
- join
- java
- spring boot
- SSL
- select
- spring
- mysql
- 자바
- nginx
- spring mvc
- 스프링부트
- jpa
- 1차원 배열
- ORM
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Archives
개발하는 자몽
람다식, 스트림(Lambda, Stream) 본문
람다식(Lambda Expressions)
람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어이다. 람다식은 함수(메서드)를 간단한 식으로 표현하는 방법이다.
람다의 표현방법은 다음과 같다.
- 함수가 단일 실행문이면 괄호를 생략할 수 있다.
- 함수가 return문으로만 구성되어 있는 경우 괄호를 생략할 수 없다.
A a = (매개변수) -> {구현코드};
a -> a*a; //매개변수가 하나인 경우, 괄호 생략가능
(int a ) -> a*a; //타입이 있는 경우 괄호 생략 불가능
(int a) -> System.out.println(a); //함수가 단일문장인 경우 괄호 생략가능
(int a, int b) -> {return a > b ? a : b; } //단일문장이 return문인 경우 괄호 생략 불가능
(a, b) -> a > b ? a : b; //매개변수의 타입이 추론 가능하면 생략가능, 반환값이 있는 경우 식/값만 적고 return문 생략가능
함수형 인터페이스
@FunctionalInterface는 일반적으로 '구현해야 할 추상 메소드가 하나만 정의된 인터페이스'를 가리킨다. 자바 컴파일러는 이렇게 명시된 함수형 인터페이스에 두 개 이상의 메소드가 선언되면 오류를 발생시킨다.
@FunctionalInterface
public interface MyLambda { //함수형 인터페이스
public int add(int a, int b); //추상 메서드
}
public class Lambda {
public static main void(String args[]) {
MyLambda ml; //객체 선언
int n1 = 100;
int n2 = 200;
ml = (n1, n2) -> n1+n2;
System.out.println(ml.add(1, 2));
}
}
Stream API
Stream이란 다양한 다양한 데이터를 표준화된 방법으로 다루기 위한 라이브러리다. 스트림은 연산 결과가 스트림인 중간 연산과 연산 결과가 스트림이 아닌 최종 연산을 지원한다. 중간 연산은 반복적으로 적용이 가능하지만 최종 연산은 스트림의 요소를 소모하므로 한 번만 적용이 가능하다.
스트림의 특징은 아래와 같다.
- 데이터를 변경하지 않는다.
- 1회용이다.
- 지연 연산을 수행한다.
- 병렬 실행이 가능하다.
public class Test {
public static void main(String args[]) {
//스트림은 데이터소스로부터 데이터를 읽기만할 뿐 변경하지 않는다.
List<Integer> list = Arrays.asList(3, 4, 2, 1, 5);
List<Integer> sortedList = list.stream().sorted.collect(Collectors.toList());
System.out.println(list); // [3, 4, 2, 1, 5]
System.out.println(sortedList) // [1, 2, 3, 4, 5]
//스트림은 일회용이다. 필요시 다시 생성
int[] arr = {1, 2, 3, 4, 5};
IntStream = Arrays.stream(arr);
int sum = stream. sum(); //stream 한번 사용
int count = (int)stream.count(); //에러 : 한번 사용한 stream 재사용 불가. 재생성해야함
}
}
참고
'Java' 카테고리의 다른 글
체크 예외, 언체크 예외 (0) | 2022.09.22 |
---|---|
isEqualTo, isSameTo, isInstanceOf (0) | 2022.08.11 |
내부 클래스 (Inner Class) (0) | 2022.07.25 |
Class 클래스, forName(), Reflection 프로그래밍 (0) | 2022.07.20 |
Wrapper 클래스 (0) | 2022.07.19 |
Comments