java - 我可以在谓词应用方法中评估变量吗?

标签 java guava

我最近在做一个大量使用 Guava 提供的集合过滤函数的项目,但我发现类似这样的东西不会产生预期的行为:

  Predicate<ProductClassDTO> secLevelPredicate = new Predicate<ProductClassDTO>() {
    @Override
    public boolean apply(ProductClassDTO pcLevel2) {

      if (pcLevel2.getFatherNodeSid() != null)
        return pcLevel2.getFatherNodeSid() == dto.getSid();
      else
        return false;
    }
  };

dto object 是外循环中的一个对象,但仍然可以访问。

apply 方法的返回永远不会返回 True,但是如果我用像 1740 这样的实数替换 dto.getSid(),这是从 db 获取的父节点号,结果很好。

所以我想我不能在 apply() 中计算变量?

我注意到 apply() javadoc 有一行说:

Its execution does not cause any observable side effects

这应该是这个问题的关键吗?

最佳答案

它应该没问题 - 尽管 dto 需要是一个最终变量,如果这是在一个方法中并且 dto 是一个局部变量。

dto.getSid() 是否可能返回一个 Integer 而问题是它只是比较引用而不是值?您可以通过使用以下方式使代码更整洁:

@Override
public boolean apply(ProductClassDTO pcLevel2) {
  return Objects.equal(pcLevel2.getFatherNodeSid(), dto.getSid());
}

关于java - 我可以在谓词应用方法中评估变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7241562/

相关文章:

caching - Guava Cache 的 BiMap 功能?

maven - Drools 6 sisu-guava 与 Guava 冲突

java - 如何使用 Guice 注入(inject) Google App Engine 数据存储?

java - 什么是NullPointerException,我该如何解决?

javascript - 将 js 从文件系统加载到 spring boot jar 应用程序中(使用 thymeleaf)

java - Scala.List 和 Java.util.List 之间的互操作

java - ListenableFuture 链可以处理内部 ExecutionException 吗?

java - 不兼容的边界错误: Java Predicate generics

java - Netty 和 BoneCP/Basic Socket Server 的并发用户更多

java - 使用 FileInputStream 与 URLConnection 读取文件