yidinghe
V2EX  ›  Java

Lambda 表达式的排版

  •  
  •   yidinghe · May 24, 2017 · 3340 views
    This topic created in 3303 days ago, the information mentioned may be changed or developed.

    Lambda 表达式的排版有些头疼,不知道怎么才能让可读性高点。

    一个查询方法可能写成下面这样子:


    query(
        () -> getFromCache(
            cacheKey,
            () -> getDAO().queryFirst(ExamProject.class, sql, projectId)
        ), 
        afterRead
    );
    

    看起来很零散,afterRead 变量不容易看出是哪个方法的参数。

    紧凑一点是这样子:


    query(() -> getFromCache(cacheKey,
            () -> getDAO().queryFirst(ExamProject.class, sql, projectId)
    ), afterRead);
    

    仍然不容易看出 query() 方法的边界。

    如果把 Lambda 表达式提取出来,就是这样子:


    Supplier<ExamProject> readFromDB = () -> getDAO().queryFirst(ExamProject.class, sql, projectId);
    Supplier<ExamProject> readFromCache = () -> getFromCache(cacheKey, readFromDB);
    query(readFromCache, afterRead);
    

    这样前缀显得很长。不知道怎么才能让可读性高点?

    4 replies    2017-06-05 22:22:36 +08:00
    zacard
        1
    zacard  
       May 24, 2017
    query 方法不要接收 2 个参数。可以改成:
    query(()->readFromCache)
    .ifAbsent(()->readFromDb)
    .afterRead(()->doSomthing);
    shot
        2
    shot  
       May 24, 2017
    Optional.ofNullable(readFromCache())
    .orElseGet(() -> readFromDb())
    .ifPresent(result -> afterRead(result);
    hepin1989
        3
    hepin1989  
       May 24, 2017 via Android
    每行一个,debug 用
    PEP4JASON
        4
    PEP4JASON  
       Jun 5, 2017
    每个点 换一行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5331 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 03:53 · PVG 11:53 · LAX 20:53 · JFK 23:53
    ♥ Do have faith in what you're doing.