기본형 Optional 에는 OptionalInt, OptionalLong, OptionalDouble 등이 있다.
이 기본형 특화 Optional은 다른 일반 Optional과 혼용할 수 없다.
응용
Optional로 프로퍼티에서 지속 시간 읽기
public int readDuration(Properties props, String name) {
return Optional.ofNullable(props.getProperty(name)) //null일 경우 Optional 처리
.flatMap(OptionalUtility::stringToInt) //OptionalUtility.stringToInt 메서드 참조
.filter(i -> i > 0) //음수 필터링
.orElse(0); //기본값 0
}
Date & Time API
java.time
java.time package 는 LocalDate, LocalTime, LocalDateTime, Instant, Duration, Period 등 새로운 클래스를 제공
LocalDate
시간을 제외한 날짜를 표현하는 불변 객체
생성
LocalDate date = LocalDate.of(2022, 1, 1);
//현재 날짜 정보
LocalDate today = LocalDate.now();
//parse 정적 메서드 사용
LocalDate date = LocalDate.parse("2022-01-01");
사용
int year = date.getYear(); // 2022
int monthValue = date.getMonthValue(); // 1
Month month = date.getMonth(); // JANUARY
int day = date.getDayOfMonth(); // 1
DayOfWeek dow = date.getDayOfWeek(); // SATURDAY
int len = date.lengthOfMonth(); // 31 (days in JANUARY)
boolean leap = date.isLeapYear(); // false (not a leap year), 윤년 여부
System.out.println(date); //2022-01-01
//TemporalField를 이용한 LocalDate 값 읽기
int year = date.get(ChronoField.YEAR); // 2022
int month = date.get(ChronoField.MONTH_OF_YEAR); // 1
int day = date.get(ChronoField.DAY_OF_MONTH); // 1
LocalTime
날짜를 제외한 시간을 표현하는 불변 객체
생성
LocalTime time = LocalTime.of(12, 34, 56); // 12:34:56
//parse 정적 메서드 사용
LocalTime time = LocalTime.parse("12:34:56");
사용
int hour = time.getHour(); // 12
int minute = time.getMinute(); // 34
int second = time.getSecond(); // 56
Period tenDays = Period.between(LocalDate.of(2022, 1, 1),
LocalDate.of(2022, 1, 11));
//시간 객체를 사용하지 않고 생성
Period tenDays = Period.ofDays(10);
Period threeWeeks = Period.ofWeeks(3);
Period twoYearsSixMonthsOneDay = Period.of(2, 6, 1);
간격을 표현하는 날짜와 시간 클래스의 공통 메서드
- between
- from
- of
- parse
- addTo
- get
- isNegative
- isZero
- minus
- multipliedBy
- negated
- plus
- subtractFrom