lambdaとRxJava

RxJava Night #rxjnight

自己紹介

  • モンスターをハントするモンスターの太一です。
  • java-jaからきますた
  • さにあらず
  • ryushi@twitter
  • taichi@GitHub
  • MH4G攻略中

太一の最新作は

Lambdaの力でコンパクトなRESTサーバ

Siden

import ninja.siden.App;

public class Main {
    public static void main(String[] args) {
        App app = new App();
        app.get("/hello",
            (req, res) -> "Hello world");
        app.listen();
    }
}
import ninja.siden.App;

public class UseWebsocket {
    public static void main(String[] args) {
        App app = new App();
        app.get("/", (q, s) ->
            new java.io.File("assets/chat.html"));

        app.websocket("/ws")
           .onText((con, txt) ->
             con.peers()
                .forEach(c -> c.send(txt)));
        app.listen(8181);
    }
}

「Javaの鉱脈」連載中

感想やツッコミを

SNSにポストして貰えると

嬉しいです

Java8のラムダ式使ってます?

RxJavaは良いけど

そのままだと辛いですよね

ラムダなし

import rx.functions.Action1;
import rx.functions.Func1;

public class NoLambda {
  public static void main(String[] args) {
    rx.Observable
      .range(1, 20)
      .filter(new Func1() {
        @Override
        public Boolean call(Integer n) {
          return n % 3 == 0;
        }})
      .map(new Func1() {
        @Override
        public String call(Integer n) {
          return String.format("[%02d] ", n);
        }})
      .toBlocking()
      .forEach(new Action1() {
        @Override
        public void call(String s) {
          System.out.println(s);
        }});
  }
}

コード量が…

androidではキツイかもしれぬ

Java8のラムダ式

public class UseLambda {
  public static void main(String[] args) {
    rx.Observable
      .range(1, 20)
      .filter(n -> n % 3 == 0)
      .map(n -> String.format("[%02d] ", n))
      .toBlocking()
      .forEach(System.out::print);
  }
}

GroovyのClosure

public class UseClosure {
  public static void main(String[] args) {
    rx.Observable
      .range(1, 20)
      .filter { it % 3 == 0 }
      .map { String.format("[%02d] ", it) }
      .toBlocking()
      .forEach { println it }
  }
}

もっと複雑なものは

WEB+DB PRESS vol81

で紹介しています

まとめ

RxJavaをJava8で使うと最高

GroovyならJava8と変わらない

ご清聴ありがとうございました