before
for(String value : myCollection){
System.out.println(value);
}
after
myCollection.forEach(value -> System.out.println(value));
map
, filter
, flatMap
count
, foreach
, collect
list.stream().filter(s -> s.startsWith(user + " ")).collect(Collectors.toList());
Stream (Java Platform SE 8 )람다식을 더 짧고 읽기 쉽게 함
종류
정적 메서드 참조
// before
boolean isReal = list.stream().anyMatch(u -> User.isRealUser(u));
// after
boolean isReal = list.stream().anyMatch(User::isRealUser);
인스턴스 메서드 참조
User user = new User();
// before
boolean isLegalName = list.stream().anyMatch(u -> user.isLegalName(u));
// after
boolean isLegalName = list.stream().anyMatch(user::isLegalName);
특정 유형(String, BigDecimal 등)의 인스턴스 메서드 참조
// before
long count = list.stream().filter(s -> String.isEmpty(s)).count();
// after
long count = list.stream().filter(String::isEmpty).count();
생성자 참조
// className::new
Stream<User> stream = list.stream().map(User::new);
@Test
void testUpdateQuestion() {
Optional<Question> oq = this.questionRepository.findById(1);
assertTrue(oq.isPresent());
Question q = oq.get();
q.setSubject("수정된 제목");
this.questionRepository.save(q);
}
---
void printAddressStreet(){
Optional<User> user = Optional.ofNullable(getUser());
String result = user.map(User::getAdress)
.map(Address::getStreet)
.orElse("not specified");
System.out.println(result);
}
Optional (Java Platform SE 8 ) public interface Callable {
static String getUri(){
return "https://www.java.com";
}
default String getDefaultUri() {
return getUri();
}
}
---
public Class JavaCaller implements Callable {
private String uri;
public void call() {
uri = getUri(); // static method 호출: Error 발생
uri = getDefaultUri(); // default method 호출: 정상
}
}
public Class JavaKoreanCaller implements Callable {
// default method는 override하여 사용 가능
@Override
public String getDefaultUri(){
return "https://www.java.com/ko";
}
}
http://www.tcpschool.com/java/java_intro_java8
https://livenow14.tistory.com/73