# 基礎的內建 functional interfaces > Java 8 導入了 functinoal interface 的使用: > 1. 只有一個方法需要實作。 > 2. Lambda 表示式必須搭配這類型的介面。 ### 基礎的四種: 1. 評斷型(Predicate) : 使用泛型參數,且回傳 ture/false (**boolean**)。 2. 消費型(Consumer) : 使用泛型參數,且沒有回傳(**void**)。 3. 功能型(Function) : 將傳入的參數由 T 型別轉換成 R 型別後回傳。 4. 供應型(Supplier) : 如同工廠方法,回傳 T 型別的實例/物件。 ## 評斷型(Predicate) ### 定義 ```java= public interface Predicate<T> { public boolean test(T t); } ``` ### 範例 ```java= public class PredicateDemo { public static void main(String[] args) { Predicate<Person> olderThan23_BeforeJava8 = new Predicate<Person>() { @Override public boolean test(Person p) { return p.getAge() >= 23; } }; Predicate<Person> olderThan23_AfterJava8 = p -> p.getAge() >= 23; for (Person p : Person.createList()) { if (olderThan23.test(p)) { system.out.println(p); } } } } ``` ## 消費型(Consumer) ### 定義 ```java= public interface Consumer<T> { public void accept(T t); } ``` ### 範例 ```java= public class ConsumerDemo { public static void main(String[] args) { Consumer<Person> printPerson_BeforeJava8 = new Consumer<Person>() { @Override public void accept(Person p) { p.printPerson(); } }; Consumer<Person> printPerson_AfterJava8 = p -> p.printPerson(); for (Person p : Person.createList()) { printPerson.accept(p); } } } ``` ## 功能型(Function) ### 定義 ```java= public interface Function<T, R> { public R apply(T t); } ``` ### 範例 ```java= public class FunctionDemo { public static void main(String[] args) { Function<Person, String> getNameFromPerson_BeforeJava8 = new Function<Person, String>() { @Override public String apply(Person p) { p.getName(); } }; Function<Person> getNameFromPerson_AfterJava8 = p -> p.getName(); for (Person p : Person.createList()) { system.out.println(getNameFromPerson.apply(p)); } } } ``` ## 供應型(Supplier) ### 定義 ```java= public interface Supplier<T> { public T get(); } ``` ### 範例 ```java= public class SupplierDemo { public static void main(String[] args) { Supplier<Person> personSupplier_BeforeJava8 = new Supplier<Person>() { @Override public Person get() { return new Person("default", 0); } }; Supplier<Person> personSupplier_AfterJava8 = () -> new Person("default", 0); Person p = personSupplier.get(); } } ``` ###### tags: `Java` `Java lambda`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up