자바 심화
애너테이션, 람다, 스트림을 배웠다. 학부시절 별로 사용하지 않는것 같아(어려웠음...) 제대로 배우지 않고 넘어갔던 부분 그리고 코딩테스트를 준비하면서 몇 알고리즘은 정말 말도 안되게 짧은 코딩이 있었다. 그리고 나는 그걸 보고 "와 야무지다... 저건 무슨 문법이지? " 라고 했던게 바로 스트림 이였다. 그런데 오늘 딱 마침 자바심화에서 람다와 스트림을 배우게 되었다.
아직 람다, 스트림을 완벽히 내 몸으로 흡수하지 못하여 오늘은 간단한 개념정도만 정리하려고 한다.
람다
람다는 우리가 사용하는 메서드를 좀 더 간단하고 편리하게 사용하기 위한 문법이다.
// 기존 방식
int sum(int num1, int num2) {
return num1 + num2;
}
// 람다식 -> * 메서드 이름하고 반환타입이 없음 *
(int num1, int num2) -> {
num1 + num2
}
스트림
배열을 순회할때 -> for문
리스트를 순회할때 -> Iterator
배열, 리스트를 순화할때 상위호환 -> Stream (가독성이 좋고 편리한 메서드들을 쉽게 구현가능)
스트림은 생성-중간 연산-최종 연산으로 이루어지고 일회성이다. 최종 연산이 끝나면 재사용 불가능
스트림 생성 (1.배열-> 스트림 2.리스트->스트림)
int[] num = {1, 3, 5};
Stream<Integer> stream = Arreays.stream();
List<Integer> numArray = new ArrayList<>();
numArray.add(1);
numArray.add(3);
numArray.add(5);
Stream<Integer> stream1 = numArray.stream();
스트림 중간연산
- 조건에 맞는 데이터들을 뽑아내는 과정
- 중복을 제거 한다거나(distinct메서드) , 특정 조건의 데이터만 뽑아낸다거나 (filter 메서드)
List<String> names = Arrays.asList("자바", "파이썬", "c++", "자바");
names.stream()
.distinct() //중복 제거하는 메서드 (중간 메서드)
.forEach(element -> System.out.println(element)); // 최종 연산 (출력)
System.out.println();
출력으로 자바, 파이썬, c++ 만 출력이 된다.
이외에도 map, sorted 등 많은 메서드들이 있다. 확실히 스트림은 알아두면 편한데 알아두기가 쉽지 않은것같다.
스트림 최종연산
- 최종적으로 리턴하는 메서드 Ex) forEach 처럼 출력
- 개수를 리턴하거나, 총합, 평균, 최고값 등등 알아두면 편리한 메서드들이 존재
int[] number = {1,2,3,4,5};
// 합계
long sum = Arrays.stream(number).sum();
System.out.println("number의 전체 요소 합 " + sum); // 15 출력
'부트캠프 > 코드스테이츠 백엔드부트캠프 43기' 카테고리의 다른 글
코드스테이츠 백엔드 부트캠프 43기 (19,20일차-Section1 회고) (0) | 2023.01.11 |
---|---|
코드스테이츠 백엔드 부트캠프 43기 (18일차-스트림 회고) (2) | 2023.01.09 |
코드스테이츠 백엔드 부트캠프 43기 (14,15일차-컬렉션 회고) (2) | 2023.01.05 |
코드스테이츠 백엔드 부트캠프 43기 (13일차-버거퀸 프로젝트 회고) (2) | 2023.01.02 |
코드스테이츠 백엔드 부트캠프 43기 (11,12일차-객체지향심화 회고) (0) | 2022.12.31 |
댓글