我需要做一系列的null检查(嵌套空检查),以获得字符串像下面的数组
String[] test;
if(CollectionUtils.isNotEmpty(checkList)){
if(MapUtils.isNotEmpty(checkList.get(0))){
if(StringUtils.isNotBlank(checkList.get(0).get("filename"))){
test = checkList.get(0).get("filename").split("_");
}
}
}
有没有更好的办法,也许使用Java8可选,执行这些类型的嵌套检查?我不成功尝试使用可选带flatmap /图。
你可以使用的长链Optional
和Stream
运营逐步改造输入步骤到输出。事情是这样的(未经测试):
String[] test = Optional.ofNullable(checkList)
.map(Collection::stream)
.orElseGet(Stream::empty)
.findFirst()
.map(m -> m.get("filename"))
.filter(f -> !f.trim().isEmpty())
.map(f -> f.split("_"))
.orElse(null);
我强烈建议您停止使用null
列表和地图。这是一个很大更好地使用空的集合,而不是空的集合,这样你就不必有null检查所有的地方。此外,不允许为空或空字符串到您的收藏; 筛选出来或取代他们null
尽快早,因为你将用户输入到内存中的对象。你不希望有接入到呼叫trim()
和isBlank()
等所有的地方。
如果你这样做,你可以简化为:
String[] test = checkList.stream()
.findFirst()
.map(m -> m.get("filename"))
.map(f -> f.split("_"))
.orElse(null);
更漂亮,不是吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句