リディア:
私は、要素のセットのリストにあります要素のキーを見つける必要があります。それを行うには良い(速い)方法は何ですか?ここに私のコードは次のとおりです。
// 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
ハッシュ化された、あなたは簡単に行うことができたcontains
に基づいてkey
で検索するO(1)
代わりに。