要素のセットのリストで要素の属性を探します

リディア:

私は、要素のセットのリストにあります要素のキーを見つける必要があります。それを行うには良い(速い)方法は何ですか?ここに私のコードは次のとおりです。

// 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)代わりに。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=362190&siteId=1