30분 Java8 시작 방법 참조 학습

4476 단어 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 );  
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기