Collctions.sort(inventory, new Comparator<Apple>() {
public int compare(Apple a1, Apple a2) {
return a1.getWeight().compareTo(a2.getWeight());
}
}
inventory.sort(comparing(Apple::getWeight));
자바 8 설계의 밑바탕을 이루는 세 가지 프로그래밍 개념
1. 스트림 처리(stream processing)
- 스크림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다.
- 자바 8에서는 java.util.stream 패키지에 스트림 API가 추가되었다.
- 스레드라는 복잡한 작업을 사용하지 않으면서도 공짜로 병렬성을 얻을 수 있다.
2. 코드 일부를 API로 전달하는 기능
- 자바 8에서는 메서드(우리 코드)를 다른 메서드의 인수로 넘겨주는 기능을 제공
- 동작 파라미터화(behavior parameterzation)
3. 병렬성과 공유 가변 데이터
- 스트림 메서드로 전달하는 코드는 다른 코드와 동시에 실행하더라도 안전하게 실행될 수 있어야 한다.
- 보통 다른 코드와 동시에 실행하더라도 안전하게 실행할 수 있는 코드를 만들려면 공유된 가변 데이터에 접근하지 않아야 한다.
- 이러한 함수를 순수 함수, 부작용 없는 함수, 상태 없는 함수
프레디케이트(predicate) ->> JPA에서나오는것도이거인가..
수학에서는 인수로 값을 받아 true나 false를 반환하는 함수를 프레디케이트라고 한다.
for-each 루프를 이용해서 각 요소를 반복하면서 작업을 수행 -> 외부 반복 (external iteration)
스트림 API 라이브러리 내부에서 모든 데 이터가 처리 -> 내부 반복 (internal iteraton)
자바함수
1. 메서드와 람다를 일급 시민으로 ->> 일급 시민..이해가 안되네..
메서드참조
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden(); // 숨겨진 파일 필터링!
}
});
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
람다 : 익명함수
public static List<Apple> filterGreenApples(List<Apple> inventory) {
List<Apple> result = new ArrayList<>();
for (Apple apple : inventory) {
if (GREEN.equals(apple.getColor))) {
result.add(apple);
}
}
return result;
}
//
public static boolean isGreenApple(Apple apple) {
return GREEN.equals(apple.getColor);
}
public interface Predicate<T> {
boolean test(T t);
}
static List<Apple> filterApples(List<Apple> inventory, Predicate<Apple> p) {
List<Apple> result = new ArrayList<>();
for (Apple apple : inventory) {
if (p.test(apple)) {
result.add(apple);
}
}
}
filterApples(inventory, Apple::isGreenApple);
// 조건을 추가하기 편하다
자바 8은 스트림 API(java.util.stream)로
1. 컬렉션을 처리하면서 발생하는 모호함과 반복적인 코드 문제
2. 멀티 코어 활용 어려움 해결
Optional<T> -> NullPoint 예외를 피할 수 있음.
'책' 카테고리의 다른 글
[DDD START!] 1장 도메인 모델 시작 (0) | 2020.07.04 |
---|---|
[DDD START!] 6장 응용 서비스와 표현 영역 (0) | 2020.07.01 |
5장. 리포지터리의 조회 기능(JPA 중심) (0) | 2020.06.24 |
[DDD START!] 4장. 리포지터리와 모델구현(JPA 중심) (0) | 2020.06.21 |
[켄트 벡의 구현 패턴] 4장 동기유발, 5장 클래스, 6장 상태 (0) | 2020.06.17 |