LoginSignup
8
7

More than 5 years have passed since last update.

3分でわかる基本の関数型インタフェース

Last updated at Posted at 2017-01-11

はじめに

この記事は基本の関数型インタフェースの実装例を紹介した記事です。

普通はラムダ式で実装したり、Streamの中で使ったりすると思いますが、単純にするためにあえてそのへんを使わずにおなじみのメソッドを使っています。

"メソッドが変数に入る"っていう感覚をつかめればいいなぁと思って。(厳密にはクラスですが)

java.util.functionパッケージには43の関数型インタフェースが定義されていますが、まず抑えておくべきは基本の4つです。この4つ以外は、これらの拡張型だと思っといて問題ないです。

Supplier

何かを持ってて、与えてくれる人。抽象メソッドはget。引数なし、戻り値あり。

import java.time.LocalDateTime;
import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        Supplier<LocalDateTime> s = LocalDateTime::now;
        System.out.println(s.get()); // -> 2017-01-11T16:29:08.086
    }
}

Consumer

もらったものを処理する人。抽象メソッドはaccept。引数あり、戻り値なし。

import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<String> c = System.out::println;
        c.accept("test"); // -> test
    }
}

Predicate

もらったものの真偽を返す人。抽象メソッドはtest。引数あり、戻り値あり(Booleanのみ)。

import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        Predicate<String> p = ""::equals;
        System.out.println(p.test("foo")); // -> false
    }
}

Function

もらったものを加工して返す、いわゆる関数。抽象メソッドはapply。引数あり、戻り値あり。

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<String, Integer> f = Integer::parseInt;
        System.out.println(f.apply("55") + 45); // -> 100
    }
}
8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7