【问题标题】:Java: Check value of public field of an object in an ArrayList without iterationJava:在没有迭代的情况下检查 ArrayList 中对象的公共字段的值
【发布时间】:2012-05-22 12:59:16
【问题描述】:

我有一个对象的 ArrayList。这些对象都属于同一个类,并包含一个布尔数据类型的公共字段。是否可以确定 arraylist 中是否存在该字段设置为 true 的任何实例,而无需遍历整个数组并检查每个字段?只是想知道是否有迭代循环的简写版本。谢谢。

【问题讨论】:

  • 没有迭代是不可能的

标签: java arraylist


【解决方案1】:

没有。

除非您有一些额外的结构以某种方式跟踪列表中的值(例如,通过跟踪每次添加/删除并确保布尔字段在添加后不会更改),否则无法检查为此无需迭代。

迭代可以通过递归或其他方法“隐藏”,但这不会显着改变任何东西。

【讨论】:

    【解决方案2】:

    JDK 不支持这一点,因为如果没有适当的闭包,语法会非常复杂。有一个库可以在简洁的语法和可用性之间取得平衡:LambdaJ。实现这一目标所涉及的黑客行为本身就是一个了不起的故事。

    【讨论】:

      【解决方案3】:

      有点……

      您正在寻找类似 LINQ for Java 的东西,因此您可以执行类似
      collection.any(x => x.bool) 的操作

      这里有一些库:
      What is the Java equivalent for LINQ?

      如果您浏览它们,您应该会发现一些速记函数来执行此操作,但它们都以某种方式遍历集合(只是隐藏在函数下方)。

      【讨论】:

      • 是的,类似于 LINQ,只是我希望它已经内置到 Java 语言中。
      【解决方案4】:

      Java 中没有这样的东西。

      然而,Guava 使用Predicate and Collections2.filter() 提供这种东西。但这不是单行的。

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-18
        • 2017-07-29
        • 1970-01-01
        相关资源
        最近更新 更多