자바 상용 함수 식 인터페이스 - Supplier 인터페이스

3242 단어 자바streamfunction
JDK 는 대량의 함수 식 인 터 페 이 스 를 제공 하여 우리 가 개발 할 때 인 터 페 이 스 를 직접 만 들 필요 가 없다. 이런 인 터 페 이 스 는 모두 통용 되 고 그들 을 배 워 서 업무 중 에 사용 할 수 있 으 며 문 제 를 편리 하 게 해결 할 수 있 을 뿐만 아니 라 매우 우아 하 다.
1. 인터페이스 개요
Supplier 인터페이스의 소스 코드 는 비교적 간단 하고 방법 은 하나 밖 에 없다.
@FunctionalInterface
public interface Supplier {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

get 방법 은 인자 가 없 지만 반환 값 이 있 습 니 다. 이 반환 값 은 일반적인 매개 변수 가 지정 한 형식 입 니 다.이 방법 은 지정 한 형식의 대상 을 만 드 는 데 사 용 됩 니 다.
2. 사용 방식
Supplier 인 터 페 이 스 를 사용 하기 전에 우 리 는 먼저 이러한 장면 을 보 았 다. 어 딘 가 에서 대상 을 얻 으 려 고 시도 하고 얻 지 못 하면 우 리 는 스스로 기본 적 인 대상 을 만 들 었 다.
우 리 는 먼저 대상 Person 을 정의 합 니 다.
public class Person {
    private final String name;
    private final Integer age;

    public Person(String name, Integer age){
        this.name = name;
        this.age = age;
    }
}

현재 테스트: getPerson 방법 은 name 을 통 해 목록 에서 Person 대상 을 찾 습 니 다. 찾 으 면 되 돌아 갑 니 다. null 로 돌아 가 는 것 을 찾 지 못 했 습 니 다. main 방법 에서 이 방법 을 호출 하고 결과 가 비어 있다 고 판단 할 때 기본 Person 대상 을 만 든 다음 에 뒤의 논 리 를 이 어 갑 니 다.
public class SupplierTest {
    private static List personList = new ArrayList() {
        {
            add(new Person("lisi", 20));
            add(new Person("zhangsan", 23));
        }
    };

    public static void main(String[] args) {
        String name = "wangwu";
        Person person = getPerson(name);
        if (person == null) {
            person = new Person(name, 10);
        }
        //后续处理
        System.out.println(person);
    }

    public static Person getPerson(String name) {
        for (Person person : personList) {
            if (person.getName().equals(name)) {
                return person;
            }
        }
        return null;
    }
}

위의 이런 표기 법 은 문 제 를 해결 할 수 있 지만 지금 은 Supplier 간략화 코드 를 사용 할 수 있다.
public class SupplierTest {
    private static List personList = new ArrayList() {
        {
            add(new Person("lisi", 20));
            add(new Person("zhangsan", 23));
        }
    };

    public static void main(String[] args) {
        String name = "wangwu";
        Person person = getPerson(name, () -> new Person(name, 10));
        //后续处理
        System.out.println(person);
    }

    public static Person getPerson(String name, Supplier supplier) {
        return personList.stream()
                .filter(e -> e.getName().equals(name))
                .findAny()
                .orElse(supplier.get());
    }
}

여기 서 우 리 는 getPerson 방법 에 인자 Supplier supplier 를 추 가 했 습 니 다. 찾 아야 할 대상 을 얻 지 못 했 을 때 호출 자가 제공 한 Supplier 가 기본 대상 을 만 듭 니 다.그러면 우리 가 main 방법 에서 getPerson 을 호출 할 때 빈 판단 을 하지 않 아 도 되 고 코드 도 비교적 명확 하고 간단 하 다.
Person person = getPerson(name, () -> new Person(name, 10));

이런 모델 은 매우 직관 적 으로 보이 기 때문에 이런 장면 에 대해 사용 을 장려 해 야 한다.getPerson 의 첫 번 째 매개 변 수 는 name 입 니 다. 이 name 값 을 사용 하여 Person 대상 을 찾 으 면 사용 합 니 다. 빈 것 으로 찾 으 면 기본 Person 인 스 턴 스, 즉 위의 Lambda 표현 식 내용 을 만 듭 니 다.

좋은 웹페이지 즐겨찾기