Lambda
표현식
- 매개변수 화살표(->) 함수몸체로 이용하여 사용할 수 있습니다.
- 함수 몸체가 단일 실행문이면 괄호{}를 생략할 수 있습니다.
- 함수 몸체가 return문으로만 구성되어 있으면 괄호{}을 생략할 수 있습니다.
1(int x) -> x+1;
2(int x, int y) -> x+y;
3(Thread lamT) -> { lamT.start(); }
Stream
특징
- 원본 데이터를 변경하지 않습니다.
- 요청되었을때만 데이터를 처리한다.
- parallelStream()을 이용하여 병렬처리가 가능하다.
예제1
1List<String> highCaloriesFoodName = foodList.stream()
2 .filter(food -> {
3 System.out.println("filter : " + food.getName());
4 // 400이상 칼로리인 음식만 필터링한다
5 return food.getCalories() > 400;
6 })
7 .map(food -> {
8 System.out.println("map : " + food.getName());
9 // 음식 이름만 가져온다
10 return food.getName();
11 })
12 .limit(3)
13 .collect(Collectors.toList());
14
15System.out.println(highCaloriesFoodName);
예제2
1List<Integer> redHeavyAppleUid = appleList.parallelStream() // 병렬 처리
2 .filter(apple -> apple.getColor().equals("RED")) // 빨간색 사과 필터링
3 .sorted(Comparator.comparing(Apple::getWeight)) // 무게 순서대로 정렬
4 .map(Apple::getUidNum).collect(Collectors.toList()); // 사과 고유번호 출력
Optional
특징
- Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스이다.
예제1
1List<String> nameList = Optional.ofNullable(getNames())
2 .orElseGet(() -> new ArrayList<>());
예제2
1String result = user.map(UserVO::getAddress) // 주소 가져오기
2 .map(Address::getPostCode) // 우편번호 가져오기
3 .orElse("우편번호 없음"); // 없으면 "우편번호 없음" 출력