2017-11-18 3 views
0

Consumer/Supplier/Predicate/UnaryOperator는 Function의 특별한 경우 일 뿐이므로 이러한 인터페이스를 Function으로 어떻게 대체 할 수 있습니까?java8 - 소비자 또는 공급자를 대체 할 함수 인터페이스 사용

T -> 기능 -> R

T -> 소비자 -> 널

널 (null) -> 공급 -> T

T -> 술어 -> 부울

T - > UnaryOperator -> T

null & 부울은 T의 특수한 경우입니다. 따라서 Predicate와 UnaryOperator를 대체하는 함수를 사용하여 두 개의 사례를 작성합니다. 예를 들어

:

private static void replacePredicate() { 
    Function<String, Boolean> func = x -> x.startsWith("a"); 
    Predicate<String> pre = x -> x.startsWith("a"); 

    System.out.println(func.apply("ape")); 
    System.out.println(pre.test("ape")); 
} 

private static void replaceUnaryOperator() { 
    Function<Integer, Integer> func = x -> x * 2; 
    UnaryOperator<Integer> uo = x -> x * 2; 

    System.out.println(func.apply(6)); 
    System.out.println(uo.apply(6)); 
} 

하지만 어떻게 기능을 사용할 수 있습니다 소비자 또는 더 유연한 교체? 예를 들어 Consumer를 대체하려고하지만 Function<String, null> func = x -> System.out.println(x);과 같은 코드는 불법입니다.

은 어떤 제안이 크게 ~

+0

왜 그렇게 할 수 있습니까? – Lino

+0

프로덕션 환경에서 코딩 할 때 java.util.function의 다른 함수를 대체하기 위해 함수를 사용하지 않을 것입니다. 함수가 아닌 특정 함수를 사용하는 것이 더 편리 할 수 ​​있기 때문입니다. 그러나 이러한 기능의 성격을 파악함으로써 이러한 기능을 더 잘 이해할 수 있고 실제로 사용할 수 있다고 생각합니다. : D – puppylpg

답변

6

Consumer<T>Function<T, Void>로 볼 수 있습니다 이해할 수있을 것이다. Supplier<T>Function<Void, T>으로 볼 수 있습니다. 함수로 작성된 소비자로부터 null을 반환해야하며 함수로 작성된 공급 업체의 Void를 인수로 사용 (및 무시)해야합니다.

내가이 점을 알고 있는지 잘 모르겠다.

+0

놀랍군! 나는'null'과'void'를 시도했지만 Java에서'Void' 클래스가 있다는 것을 몰랐습니다 !!! 고마워. 너의 우아한 대답으로 만들었 어 ~ – puppylpg