我需要找到元素集列表中元素的键。有什么更好(更快)的方法?这是我的代码:
// get tags from an ArrayList of resources
boolean tagFound = false;
HashSet<Tag> resourceTags = new HashSet<>();
for (Resource resource : list) {
Set<Tag> tmpTags = resource.getTags();
resourceTags.addAll(tmpTags);
}
// get tag keys from all tags
for (Tag resourceTag : resourceTags) {
if (resourceTag.getKey().equals(tag.getKey())) {
tagFound = true;
break;
}
}
最佳答案
如果您要做的只是再次迭代以查找出现的情况,那么您可以简单地消除 addAll
开销。
for (Resource resource : list) {
for (Tag resourceTag : resource.getTags()) {
if (resourceTag.getKey().equals(tag.getKey())) {
tagFound = true;
break;
}
}
}
如果以函数方式编写,它看起来像:
boolean tagFound = list.stream()
.flatMap(r -> r.getTags().stream())
.anyMatch(t -> t.getKey().equals(tag.getKey()));
注意:在性能方面,在 R x T 矩阵中,您必须支付 O(R x T)
运行时间来搜索元素,除非它们经过哈希处理。在后一种情况下,如果 Tag
被散列,您可以简单地根据 key
执行 contains
来在 O(1)
中查找。
关于java - 在元素集列表中查找元素的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419789/