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(

这是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);
 }
}

你的代码中有一部分绝对是多余的。 可以这么简单:

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);
});