V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yidinghe
V2EX  ›  Java

Lambda 表达式的排版

  •  
  •   yidinghe · 2017-05-24 11:40:13 +08:00 · 2801 次点击
    这是一个创建于 2774 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条回复    2017-06-05 22:22:36 +08:00
    zacard
        1
    zacard  
       2017-05-24 13:17:08 +08:00
    query 方法不要接收 2 个参数。可以改成:
    query(()->readFromCache)
    .ifAbsent(()->readFromDb)
    .afterRead(()->doSomthing);
    shot
        2
    shot  
       2017-05-24 16:18:29 +08:00
    Optional.ofNullable(readFromCache())
    .orElseGet(() -> readFromDb())
    .ifPresent(result -> afterRead(result);
    hepin1989
        3
    hepin1989  
       2017-05-24 19:17:38 +08:00 via Android
    每行一个,debug 用
    PEP4JASON
        4
    PEP4JASON  
       2017-06-05 22:22:35 +08:00
    每个点 换一行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   947 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:40 · PVG 06:40 · LAX 14:40 · JFK 17:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.