Function<T, R> Java 8 Example
What is Function in Java 8 ?
Function<T, R> คือ Functional Interface เพื่อให้ง่ายต่อการใช้งานและสะดวกโดย จะมีการใส่ค่า Input(T) และทำงานตามคำสั่งที่เรากำหนดไว้ และคืนค่า Output (R) ออกมา T และ R สามารถประกาศเป็น Type ที่เราต้องการได้เลย
- T — Type of the input to the function.
- R — Type of the result of the function.
INTERFACE
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
Example 1
Function<String, Integer> func = x -> x.length();
Integer apply = func.apply("Kachain");
System.out.println(apply); // result 7
จากตัวอย่างข้างต้นคือ การนำ Fuction<T,R> มาประยุกต์ใช้ และผลลัพธ์ที่ได้เมื่อเรียก apply หมายถึงการเรียกใช้ x.length(); ทำงาน โดยรับ parameter “Kachain” = 7
Example 2
เราสามารถสร้าง function แล้วกำหนดการทำงานเองได้ด้วยนะครับ
public static int myMethod(String name) {
// do stup here
Int length = name.length();
return length + 1;
}
Function<String, Integer> func = x -> myMethod(x)
Integer apply = func.apply("Kachain");
System.out.println(apply); // result 8
Example 3
เราสามารถส่ง function เป็น argrument ไปได้ด้วยนะครับแล้วเรียก apply ในการใช้งานเลยครับ
public static int myMethod1(String name) {
// do stup here
Int length = name.length();
return length + 1;
}
public static int myMethod2(String name, Function<String,Int> func) {
// do stup here
Int length = name.length();
Int apply = func.apply(name)
return apply - length;
}
Function<String, Integer> func = x -> myMethod1(x)
Int result = myMethod2("Kachain", func)
System.out.println(result); // result 1
Additional
นอกจากนี้ยังสามารถ เรียกใช้งานต่อกันได้ จะเรียกว่า Chain Function นะครับซึ่งจะเรียก method ที่ชื่อว่า andThen ได้เลยนะครับ โดย parameter จะเป็น function นะคร้าบบบ
public static int myMethod1(String name) {
// do stup here
Int length = name.length();
return length + 1;
}
public static int myMethod2(Int length) {
return length + 2;
}
Function<String, Integer> func1 = x -> myMethod1(x)
Function<Integer, Integer> func2 = x -> myMethod2(x)
Int result = func1.andThen(func2).apply("Kachain")
System.out.println(result); // result 10
Conclusion
ส่วนมากแล้วจะนิยม ไปใช้กับ func ที่ต้องการส่ง function interface เขามาเรียกใช้ โดยจะให้ ผู้เรียกใช้สร้าง func นั้นขึ้นมาเองและกำหนดการทำงานเองได้ หวังว่าจะเป็นประโยชน์ต่อการใช้งานนะคร้าบบบบ
อ่าน BiFunction -> https://medium.com/@kachain/java-8-bifunction-examples-96b7d330f4e9