簡體   English   中英

檢查Set中是否存在Java對象

[英]Check if java object exists in the Set

我有一個Set ,我將檢查是否仍然存在具有相同屬性的Object 我的第一種方法是遍歷列表並進行檢查,但是我想Java 8中有更好的方法。有人建議如何以一種優雅的方式檢查它嗎?

final Set<UserSelected> preparedUserSelected = new HashSet<>();

    UserSelected userSelected1 = new UserSelected();
    userSelected1.setInstitutionId("1");
    userSelected1.setUserId("1");
    userSelected1.setChatMessageFilter(ChatMessageFilterEnum.TYP2);

    UserSelected userSelected2 = new UserSelected();
    userSelected2.setInstitutionId("2");
    userSelected2.setUserId("2");
    userSelected2.setChatMessageFilter(ChatMessageFilterEnum.TYP1);

    UserSelected userSelected3 = new UserSelected();
    userSelected3.setInstitutionId("3");
    userSelected3.setUserId("3");
    userSelected3.setChatMessageFilter(ChatMessageFilterEnum.TYP2);

    preparedUserSelected.add(userSelected1);
    preparedUserSelected.add(userSelected2);
    preparedUserSelected.add(userSelected3);

    UserSelected userSelectedToCheck = new UserSelected();
    userSelectedToCheck.setInstitutionId("2");
    userSelectedToCheck.setUserId("2");
    userSelectedToCheck.setChatMessageFilter(ChatMessageFilterEnum.TYP1);

    boolean contains = false;
    for (final UserSelected userSelected : preparedUserSelected) {
        if (userSelectedToCheck.getInstitutionId().equals(userSelected.getInstitutionId())
            && userSelectedToCheck.getUserId().equals(userSelected.getUserId())
            && userSelectedToCheck.getChatMessageFilter() == userSelected.getChatMessageFilter())
            contains = true;
    }

    System.out.println("contains: " + contains);

您需要在UserSelected類中正確實現equalshashCode方法。 之后,您可以使用preparedUserSelected.contains(userSelectedToCheck)輕松檢查其是否存在。

這是您的類的equals/hashCode的示例實現:

@Override
public int hashCode() {
    return Objects.hash(getUserId(), getInstitutionId(), getChatMessageFilter());
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null || getClass() != obj.getClass())
        return false;
    UserSelected other = (UserSelected) obj;
    return Objects.equals(getChatMessageFilter(), other.getChatMessageFilter()) &&
            Objects.equals(getInstitutionId(), other.getInstitutionId()) &&
            Objects.equals(getChatMessageFilter(), other.getChatMessageFilter());
}

試試這個Lambda Expression(Java 8)的任何匹配項。

返回此流的任何元素是否與提供的謂詞匹配。 如果不需要確定結果,則可能不會對所有元素都評估謂詞。 如果流為空,則返回false,並且不對謂詞求值。

boolean isExist = preparedUserSelected.stream()
            .anyMatch(userSelected -> userSelected.getInstitutionId().equalsuserSelected.getInstitutionId());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM