30분 Java8 시작 방법 참조 학습
앞서 두 글은 자바8의 lambda 표현식 방법과 기본 방법 및 정적 인터페이스 방법을 소개했다.오늘 우리는 Java8의 새로운 언어 특성인 메서드 참조(Method References)를 계속 공부합니다.
lambda 표현식을 배운 후에 우리는 보통 lambda 표현식을 사용하여 익명 방법을 만듭니다.그러나 때때로 우리는 이미 존재하는 방법을 호출했을 뿐이다.다음과 같습니다.
Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));
Java8에서 우리는 직접 방법 인용을 통해 lambda 표현식에 이미 존재하는 방법을 간략하게 쓸 수 있다.
Arrays.sort(stringsArray, String::compareToIgnoreCase);
이러한 특성을 메서드 참조(Method Reference)라고 합니다.메소드 참조 형식
방법 인용의 표준 형식은 클래스 이름: 방법 이름입니다.(주의: 방법명만 쓰면 괄호는 필요 없음)
다음과 같은 네 가지 방법으로 참조할 수 있습니다.
유형
예제
정적 방법 참조
ContainingClass::staticMethodName
어떤 대상의 실례를 인용하는 방법
containingObject::instanceMethodName
어떤 유형의 임의의 대상을 인용하는 실례 방법
ContainingType::methodName
참조 구조 방법
ClassName::new
다음은 작은 Demo를 통해 다음과 같은 몇 가지 형식의 참조를 학습합니다.
public class Person {
public enum Sex{
MALE,FEMALE
}
String name;
LocalDate birthday;
Sex gender;
String emailAddress;
public String getEmailAddress() {
return emailAddress;
}
public Sex getGender() {
return gender;
}
public LocalDate getBirthday() {
return birthday;
}
public String getName() {
return name;
}
public static int compareByAge(Person a,Person b){
return a.birthday.compareTo(b.birthday);
}
}
정적 방법 참조
Person [] persons = new Person[10];
//
Arrays.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.birthday.compareTo(o2.birthday);
}
});
// lambda
Arrays.sort(persons, (o1, o2) -> o1.birthday.compareTo(o2.birthday));
// lambda
Arrays.sort(persons, (o1, o2) -> Person.compareByAge(o1,o2));
//
//
Arrays.sort(persons, Person::compareByAge);
인용 대상의 실례 방법
class ComparisonProvider{
public int compareByName(Person a,Person b){
return a.getName().compareTo(b.getName());
}
public int compareByAge(Person a,Person b){
return a.getBirthday().compareTo(b.getBirthday());
}
}
ComparisonProvider provider = new ComparisonProvider();
// lambda
//
Arrays.sort(persons,(a,b)->provider.compareByAge(a,b));
//
//
Arrays.sort(persons, provider::compareByAge);
유형 대상을 인용하는 실례 방법
String[] stringsArray = { "Hello" , "World" };
// lambda
Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2));
//
//
Arrays.sort(stringsArray, String::compareToIgnoreCase);
참조 구조 방법
public static <T, SOURCE extends Collection<T>, DEST extends Collection<T>>
DEST transferElements(SOURCE sourceColletions, Supplier<DEST> colltionFactory) {
DEST result = colltionFactory.get();
for (T t : sourceColletions) {
result.add(t);
}
return result;
}
...
final List<Person> personList = Arrays.asList(persons);
// lambda
Set<Person> personSet = transferElements(personList,()-> new HashSet<>());
//
//
Set<Person> personSet2 = transferElements(personList, HashSet:: new );
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Liquibase】DB 작성·테이블 정의 변경신규 스타터 프로젝트 작성 Liquibase와 MySQL 선택 application.properties에 DB 정보 넣기 MySQL에서 "testdatabase"라는 데이터베이스 만들기 빌드 종속성 추가 build....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.