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);
这样前缀显得很长。不知道怎么才能让可读性高点?
1
zacard 2017-05-24 13:17:08 +08:00
query 方法不要接收 2 个参数。可以改成:
query(()->readFromCache) .ifAbsent(()->readFromDb) .afterRead(()->doSomthing); |
2
shot 2017-05-24 16:18:29 +08:00
Optional.ofNullable(readFromCache())
.orElseGet(() -> readFromDb()) .ifPresent(result -> afterRead(result); |
3
hepin1989 2017-05-24 19:17:38 +08:00 via Android
每行一个,debug 用
|
4
PEP4JASON 2017-06-05 22:22:35 +08:00
每个点 换一行
|