본문 바로가기

Java

메소드 레퍼런스

728x90

1. 메소드 레퍼런스(Method References)

Consumer<String> func = text -> System.out.println(text);
func.accept("Hello");
Consumer<String> func = System.out::println;
func.accept("Hello");
  • Static 메소드 레퍼런스
  • Instance 메소드 레퍼런스
  • Constructor 메소드 레퍼런스

2. Static 메소드 레퍼런스

public class Example {

    public static void main(String[] args) {

        Executable exe = text -> Printer.printSomething(text);
        Executable exe2 = Printer::printSomething;
        exe.doSomething("do something");
        exe2.doSomething("do something");
    }

    interface Executable {
        void doSomething(String text);
    }

    public static class Printer {
        static void printSomething(String text) {
            System.out.println(text);
        }
    }
}
import java.util.function.Consumer;

public class Example {

    public static void main(String[] args) {

        Consumer<String> exe = text -> Printer.printSomething(text);
        Consumer<String> exe2 = Printer::printSomething;
        exe.accept("do something");
        exe2.accept("do something");
    }

    public static class Printer {
        static void printSomething(String text) {
            System.out.println(text);
        }
    }
}
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> companies = Arrays.asList("google", "apple", "google", "apple", "samsung");

        // 1. lambda expression
        companies.stream().forEach(company -> System.out.println(company));

        // 2. static method reference
        companies.stream().forEach(System.out::println);
    }
}

3. Instance 메소드 레퍼런스

import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<Company> companies = Arrays.asList(new Company("google"),
                new Company("apple"), new Company("samsung"));
        companies.stream().forEach(company -> company.printName());
    }

    public static class Company {
        String name;
        public Company(String name) {
            this.name = name;
        }

        public void printName() {
            System.out.println(name);
        }
    }
}
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> companies = Arrays.asList("google", "apple", "google", "apple", "samsung");
        companies.stream()
                .mapToInt(String::length)
//                .mapToInt(company -> company.length())  /* Lamda expression */
                .forEach(System.out::println);
    }
}

4. Constructor 메소드 레퍼런스

import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> companies = Arrays.asList("google", "apple", "google", "apple", "samsung");
        companies.stream()
                .map(Company::new)
                .forEach(Company::printName);
    }

    public static class Company {
        String name;
        public Company(String name) {
            this.name = name;
        }

        public void printName() {
            System.out.println(name);
        }
    }
}
300x250

'Java' 카테고리의 다른 글

오버라이딩  (0) 2023.07.27
인터페이스  (0) 2023.07.27
람다 표현식  (0) 2023.07.09
Java의 함수형 인터페이스  (0) 2023.07.09
함수형 인터페이스와 람다 표현식  (0) 2023.07.06