如何将以下方法转换为Java 8内联函数?

uma*_*uma 6 java intellij-idea java-8

我需要转换下面的方法java 8内联函数.需要一些专家的帮助和解释才能做到这一点.

@Override
public boolean a(final Collection<DoseDetailMutableDTO> detailModels) {
    for (DoseDetailMutableDTO dd : detailModels) {
         final boolean doseDetailTextScheduled = isDoseDetailTextScheduled(dd, 1);
         if (doseDetailTextScheduled) {
             return true;
         }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这个intelj IDE有没有捷径?

Nam*_*man 8

您可以使用Stream.anyMatch:

public boolean a(final Collection<DoseDetailMutableDTO> detailModels) {
    return detailModels.stream()
                       .anyMatch(dd -> isDoseDetailTextScheduled(dd, 1));
}
Run Code Online (Sandbox Code Playgroud)

返回true,如果流的任何元件匹配提供谓词,否则false

编辑 :(来自评论)

在IntelliOS IDEA上学习这种建议的快捷方式的控件 Ctrl+Space也可以在MacOS上使用Alt+Enter.

  • 在IntelliJIDEA上学习这种建议快捷方式的控件是"Ctrl + Space",或者在MacOS上也可以使用"Alt + Enter". (3认同)

Tim*_*sen 5

我们可以在这里尝试使用流:

@Override
public boolean a (final Collection<DoseDetailMutableDTO> detailModels) {
    return detailModels.stream()
               .filter(x -> isDoseDetailTextScheduled(x, 1))
               .findFirst()
               .orElse(false);
}
Run Code Online (Sandbox Code Playgroud)

实际上,为了使您的方法null安全,如果输入列表可能是null,我们可以尝试这样做:

@Override
public boolean a (final Collection<DoseDetailMutableDTO> detailModels) {
    return Optional.ofNullable(detailModels)
                   .map(Collection::stream)
                   .orElseGet(Stream::empty)
                   .filter(x -> isDoseDetailTextScheduled(x, 1))
                   .findFirst()
                   .orElse(false);
}
Run Code Online (Sandbox Code Playgroud)

  • 你可以将第一个例子简化为`.findFirst().isPresent()`,第二个例子是`return detailModels!= null && detailModels.stream().filter(x - > isDoseDetailTextScheduled(x,1)).findFirst( ).isPresent();`.创建一个Optional只是为了检查某些东西是否为null应该避免,因为它需要更多的内存并且与Optional的主要目的相矛盾. (2认同)