这是代码的Java 8之前的方式,
Album testAlbum = (Album) testMap.get(testField);
List < Album > testList = new ArrayList();
if (testAlbum != null) {
if (isFree) {
if (applyFreeFilter(testAlbum)) {
testList.add(testAlbum);
}
} else {
testList.add(testAlbum);
}
}
尝试使用compute if present,以避免多个if else,但卡住了。
这是一种矫枉过正,还是我在BiFunction中遗漏了一些东西来处理地图上的值?
testMap.computeIfPresent(testField, (k, v) -> {
if (isFree) {
if (applyFreeFilter((Album) v)) {
testList.add((Album) v);
}
} else {
testList.add((Album) v);
}
});
答案 0 :(得分:2)
你的代码的一部分肯定是一种矫枉过正。 它可以很简单:
if(!isFree || applyFreeFilter((Album) v)) {
testList.add((Album) v);
}
如果isFree
为false
,则applyFreeFilter
不会执行,您可以节省时间。
关于if (testAlbum != null)
检查,这不错,但您可以将testAlbum
包裹在Optional<Album>
中,然后您可以写testAlbum.ifPresent(theAlbum -> doSomething(theAlbum));
。我认为你没有使用k
变量...所以computeIfPresent
在你的代码中也有点过分。
总结我的解决方案将是:
Optional<Album> testAlbum = Optional.ofNullable((Album) testMap.get(testField));
final List <Album> testList = new ArrayList();
testAlbum.ifPresent(theAlbum -> {
if(!isFree || applyFreeFilter((Album) theAlbum))
testList.add((Album) theAlbum);
});
6行代码而不是初始代码13。