Java 检查对象列表是否具有与该对象的给定属性匹配的节点
我有一个Leave对象的列表,Leave的属性是leaveDate(java.util.Date)、leaveTime(int)、leaveType(String)。现在,为了检查该列表是否有一个节点,其属性leaveDate与timeStamp匹配,timeStamp是另一个日期对象,我们可以遍历该列表。还有别的办法吗?我还有以下条件检查器:Java 检查对象列表是否具有与该对象的给定属性匹配的节点,java,collections,Java,Collections,我有一个Leave对象的列表,Leave的属性是leaveDate(java.util.Date)、leaveTime(int)、leaveType(String)。现在,为了检查该列表是否有一个节点,其属性leaveDate与timeStamp匹配,timeStamp是另一个日期对象,我们可以遍历该列表。还有别的办法吗?我还有以下条件检查器: if (Lambda.select(this.fullLeaves, Lambda.having(Lambda.on(Leave.class).getL
if (Lambda.select(this.fullLeaves, Lambda.having(Lambda.on(Leave.class).getLeaveDate(), Matchers.equalTo(timeStamp))).size() == 0) {
//some code
}
它使用。谢谢。在搜索对象列表时,最好是在O(n)时间内迭代对象 还有两个其他选项,但它们要求您使用另一个数据结构,而不是列表,或者除列表之外:
最后,最好的办法是在特定的使用模式下测试各种实现。要提高simple iterate的性能并测试属性,必须创建一个数据结构作为列表中对象的辅助索引,并将选择谓词转换为针对该索引的查询 选择谓词的性质将决定什么索引数据结构是最好的。如果您只是测试属性相等性,那么HashMap就可以了。如果需要进行时间戳比较(之前、之后),则需要一个树映射 请注意,这里有一个权衡。二级索引将为您提供更快的列表搜索,但成本将增加复杂性,并降低列表添加和删除速度。因此,平均列表大小和使用模式等因素将决定二级索引是否能全面提高性能
如果您正在测试的属性是可变的/在对象位于列表中时可能会更改,那么您需要在每次更改登记对象的属性时更新辅助索引。正确实现这一点将增加大量额外成本和复杂性