Java8の@FunctionalInterfaceを使う

関数インターフェースのPredicateとかFunctionがあるのであんまり使わないけど、引数とか3つ以上のものはないのでつくる必要がある。

基本的に抽象メソッドを1つしかもっていなければOK。defaultメソッドはいくつもっていてもOKです。(ラムダ式のときに何を使うかわからなくなっちゃうからかなと)

@FunctionalInterface
interface SampleInterface {
      boolean filter(String a);
}

こんな感じでカンタンに作れる

使うときはこんな感じでカンタンに使える。

SampleInterfacle sampleFilter = s -> "a".equals(s);
sampleFilter.filter("a");

なんかもうカンタン過ぎますね

ちなみに引数3つは、こんな感じ

@FunctionalInterface
interface SampleInterface {
      boolean filter(String a, String b, String c);
}

SampleInterfacle sampleFilter = (s, t , u)  -> "a".equals(s);
sampleFilter.filter("a","b","c");

こんな感じで使える。なんかもうカンタン過ぎますね。みんなもっと使いましょう!

awsのlambdaをserverless framework runtime Java8の環境構築

AWSのlambdaをserverless frameworkでJavaで動かそうとしているので、環境構築メモ

serverless frameworkインストール

まずはnpmでインストール

$ npm install -g serverless 

templateプロジェクト作成

今回は、aws-gradle-javaで作ることに

$ serverless create --template aws-java-gradle --path ${プロジェクト名}
$ cd ${プロジェクト名}

ローカル環境で実行

Javaプロジェクトをビルドしたあとにローカル環境で実行してみる
hello というエンドポイントが設定されてるので、これで実行してみる

$ serverless invoke local --function hello

Serverless: In order to get human-readable output, please implement "toString()" method of your "ApiGatewayResponse" object.
log4j:WARN No appenders could be found for logger (com.serverless.Handler).

log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

com.serverless.ApiGatewayResponse@475530b9

こんな感じで、Javaが実行される

awsのアップロード等は次回