Tìm hiểu về Functional Interface Function trong Java

Interface Function được sử dụng để chuyển đổi dữ liệu từ tham số truyền vào để trả về kết quả ở định dạng khác. Để làm được điều này, chúng ta sẽ implement phương thức abstract apply() được định nghĩa trong interface Function.

Nhưng trước tiên hãy xem nội dung của interface Function xem thế nào nhé các bạn!

Chúng ta thường sử dụng interface Function trong phương thức map() của đối tượng Stream với vai trò là tham số của phương thức này, ví dụ như sau:

Như các bạn thấy, interface Function được định nghĩa với 2 kiểu data generic, đầu tiên sẽ là input được truyền vào parameter của phương thức apply() và cái thứ hai sẽ là output của phương thức apply() này. Trong ví dụ của mình, dữ liệu đầu vào là kiểu dữ liệu String, và sau khi chuyển đổi, dữ liệu trả về là kiểu Integer.

Chúng ta có thể đưa định nghĩa của Function f vào phương thức map như sau:

Kết quả:

Tìm hiểu về Functional Interface Function trong Java

Phương thức compose() dùng để chuyển đổi nhiều bước khác nhau, kết quả của function sau sẽ là input của function trước. Ví dụ:

Trong đoạn code trên các bạn sẽ thấy Function f2  sẽ được thực thi trước, sau đó mới tới Function f1.

Kết quả:

Tìm hiểu về Functional Interface Function trong Java

Phương thức andThen() cũng tương tự như phương thức compose(), cũng dùng để chuyển đổi nhiều bước khác nhau nhưng nó xử lý theo thứ tự, kết quả của function trước sẽ là input của function sau. Ví dụ như sau khi chuyển đổi String sang Integer thì chúng ta chuyển đổi tiếp các giá trị Integer này sang String với giá trị tăng lên 1 như sau:

Kết quả:

Tìm hiểu về Functional Interface Function trong Java

Phương thức static identity() được dùng để trả về giá trị của input. Bạn truyền vào giá trị gì thì output của phương thức này là giá trị đó. Ví dụ:

Kết quả:

Tìm hiểu về Functional Interface Function trong Java

Chúng ta có nhiều biến thể của Interface Function tuỳ thuộc vào kiểu dữ liệu trả về. Ví dụ như nếu trả về kiểu Integer chúng ta có interface ToIntFunction hay trả về kiểu Long chúng ta có interface ToLongFunction, …

BiFunction interface là một biến thể của Function interface cho phép chúng ta có thể truyền 2 giá trị cho input và trả về giá trị output, ví dụ như:

Ở đây, mình định nghĩa một BiFunction với 2 input kiểu giá trị String, output kiểu giá trị Integer để return lại độ dài của một chuỗi sau khi nối 2 chuỗi được truyền vào ở input.

Kết quả:

Tìm hiểu về Functional Interface Function trong Java

Add Comment