Java 関数型インターフェースのサンプル(Function)

Javaの関数型インターフェースのFunctionのサンプルです。

目次

説明 Functionインターフェース
サンプル クラスにFunctionインターフェースを実装する
  匿名クラスでFunctionインターフェースを使用する

Functionインターフェース

インターフェース public interface Function<T,R>
メソッド R apply(T t)
  • Functionは、関数という意味です。入力と出力があります。
  • applyメソッドは、引数があり、戻り値もあります。
  • FunctionのTはメソッドの引数の型で、Rはメソッドの戻り値の型です。
  • 以下は、OracleのJava8のFunctionインターフェースのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/Function.html

関数型インターフェースのFunctionのサンプルです。

package test1;

import java.util.function.Function;

public class Test1 {
	public static void main(String[] args) {
		
		Function <Integer,String> make1 = a -> a + "です";
		
		String b = make1.apply(2);
		System.out.println(b); //2です
	}
}

3行目は、java.util.functionパッケージのFunctionインターフェースをimportしています。

8行目は、Functionインターフェースを使用したラムダ式です。
Function <Integer,String>の
Integerは、Function<T,R>のTでメソッドの引数の型です。
Stringは、Function<T,R>のRでメソッドの戻り値の型です。

10行目は、applyメソッドでIntegerの引数がありStringの値を返します。

 

クラスにFunctionインターフェースを実装する

package test1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;

public class Test1 {
	public static void main(String[] args) {

		List<Integer> num1 = new ArrayList<>(Arrays.asList(50, 10, 300));
		Sort1 sort1 = new Sort1();
		List<Integer> list1 = sort1.apply(num1);

		for (Integer a : list1) {
			System.out.println(a); // 10 50 300
		}
	}
}
class Sort1 implements Function<List<Integer>, List<Integer>> {
	@Override
	public List<Integer> apply(List<Integer> c1) {
		Collections.sort(c1);
		return c1;
	}
}

6行目は、java.util.function.Functionインターフェースをimportしています。
20行目は、Functionインターフェースを実装しています。
最初のList<Integer>は引数の型で次のList<Integer>は戻り値の型です。
12行目は、applyメソッドです。引数と戻り値があります。
16行目は、数値が昇順にソートされて表示されます。

 

匿名クラスでFunctionインターフェースを使用する

package test1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;

public class Test1 {
	public static void main(String[] args) {

		List<Integer> c1 = new ArrayList<>(Arrays.asList(50, 10, 300));

		List<Integer> list1 = new Function<List<Integer>, List<Integer>>() {
			@Override
			public List<Integer> apply(List<Integer> list1) {
				Collections.sort(list1);
				return list1;
			}
		}.apply(c1);

		for (Integer a : list1) {
			System.out.println(a); // 10 50 300
		}
	}
}

6行目は、java.util.functionパッケージのFunctionインターフェースをimportしています。
13行目は、匿名クラスです。クラス名はありません。
19行目は、applyメソッドです。引数と戻り値があります。
19行目は、数値が昇順にソートされて表示されます。

関連の記事

Java ラムダ式のサンプル
Java 関数型インターフェースのサンプル(Consumer)
Java 関数型インターフェースのサンプル(Supplier)

△上に戻る