Java 8映射计算在双函数内呈现布尔检查
这是Java 8之前的代码方式Java 8映射计算在双函数内呈现布尔检查,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,这是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(
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);
}
}
你的代码中有一部分绝对是多余的。 可以这么简单:
if(!isFree || applyFreeFilter((Album) v)) {
testList.add((Album) v);
}
如果isFree
为false
,则不会执行applyFreeFilter
,这样可以节省时间
至于如果(testAlbum!=null)
检查,这还不错,但是您可以将testAlbum
包装在可选的中,然后您可以编写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);
});
Optional testAlbum=Optional.ofNullable((相册)testMap.get(testField));
最终列表testList=newarraylist();
如果存在,则测试样本数(测试样本数->{
如果(!isFree | | applyFreeFilter((相册)theAlbum))
添加((唱片集)专辑);
});
6行代码,而不是最初的13行。不会!isFree | | applyFreeFilter
do it?@GPI,是的,它有:)谢谢。我建议您使用泛型,这样您就不需要兑现类型。
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);
});