【发布时间】:2012-05-22 12:59:16
【问题描述】:
我有一个对象的 ArrayList。这些对象都属于同一个类,并包含一个布尔数据类型的公共字段。是否可以确定 arraylist 中是否存在该字段设置为 true 的任何实例,而无需遍历整个数组并检查每个字段?只是想知道是否有迭代循环的简写版本。谢谢。
【问题讨论】:
-
没有迭代是不可能的
我有一个对象的 ArrayList。这些对象都属于同一个类,并包含一个布尔数据类型的公共字段。是否可以确定 arraylist 中是否存在该字段设置为 true 的任何实例,而无需遍历整个数组并检查每个字段?只是想知道是否有迭代循环的简写版本。谢谢。
【问题讨论】:
没有。
除非您有一些额外的结构以某种方式跟踪列表中的值(例如,通过跟踪每次添加/删除并确保布尔字段在添加后不会更改),否则无法检查为此无需迭代。
迭代可以通过递归或其他方法“隐藏”,但这不会显着改变任何东西。
【讨论】:
JDK 不支持这一点,因为如果没有适当的闭包,语法会非常复杂。有一个库可以在简洁的语法和可用性之间取得平衡:LambdaJ。实现这一目标所涉及的黑客行为本身就是一个了不起的故事。
【讨论】:
有点……
您正在寻找类似 LINQ for Java 的东西,因此您可以执行类似collection.any(x => x.bool) 的操作
这里有一些库:
What is the Java equivalent for LINQ?
如果您浏览它们,您应该会发现一些速记函数来执行此操作,但它们都以某种方式遍历集合(只是隐藏在函数下方)。
【讨论】:
Java 中没有这样的东西。
然而,Guava 使用Predicate and Collections2.filter() 提供这种东西。但这不是单行的。
【讨论】: