출처 ‣ 더 자바 Java 8, 백기선 / 인프런
// 인터페이스
public interface A {
/**
* @implSpec
* 이 구현체는 getName()가져온 문자열을 대문자로 바꿔 출력한다.
* */
default void printNameUpperCase() {
System.out.println(getName().toUpperCase());
}
// default String toString() { return ""; } → Object메소드 재정의시 컴파일 에러
String toString(); // 선언은 가능 → 추상메서드라고 하기엔 모든 interface생성시 기본으로 제공, 특별히 재정의 필요할때만 문서화를 추가해 작성
void printName();
String getName();
}
// 구현체
public class DefaultA implements A {
String name;
public DefaultA(String name) {
this.name = name;
}
@Override
public void printName() {
System.out.println(getName());
}
@Override
public String getName() {
return this.name;
}
}
// main
public class Main {
public static void main(String[] args) {
A a = new DefaultA("esjo");
a.printNameUpperCase(); // ESJO
}
}
// 상속
public interface B extends A {
void printNameUpperCase(); // default메서드의 경우 추상메서드로 재정의가능. 물론, 재정의하지 않아도 된다.
}
// 같은 이름의 default 메서드를 가지는 인터페이스
public interface C {
default void printNameUpperCase() {
System.out.println("C");
};
}
// 컴파일에러! → 오버라이딩 필요
public class DefaultA implements A, C { ... }
/* ArrayList <- List <- Collection <- Iterable(의 default메서드 : forEach)
* ArrayList에서 재정의되어서 사용
*/
List<String> names = new ArrayList();
names.add("esjo");
names.add("joe");
names.add("cho");
/*names.forEach(s -> {
System.out.println(s);
});*/
names.forEach(System.out::println);
Spliterator<String> spliterator1 = names.spliterator();
// 절반으로 쪼갬
Spliterator<String> spliterator2 = spliterator1.trySplit();
while (spliterator1.tryAdvance(System.out::println));
System.out.println("====");
while (spliterator2.tryAdvance(System.out::println));
// output
joe
cho
====
esjo
names.stream().map(String::toUpperCase)
.filter(s -> s.startsWith("j"))
.collect(Collectors.toSet());
names.removeIf(s -> s.startsWith("j"));
names.sort(String::compareToIgnoreCase);
Comparator<String> compareToIgnoreCase = String::compareToIgnoreCase;
names.sort(compareToIgnoreCase.reversed());
Comparator<String> compareToIgnoreCase = String::compareToIgnoreCase;
names.sort(compareToIgnoreCase.reversed().thenComparing(/*코드작성*/));