簡體   English   中英

如何檢查Set是否包含一個成員變量等於某個值的對象

[英]How to check if a Set contains an object which has one member variable equal to some value

我有一組java的Result對象。 我的Result類定義如下所示:

private String url;
private String title;
private Set<String> keywords;

我已將我的信息存儲在名為Keywords的數據庫表中,如下所示

關鍵字= [id,url,title,keyword,date-time]

如您所見,數據庫中的對象和行之間沒有一對一的映射。 我正在使用SQL(MySQL DB)來提取值並擁有合適的ResultSet對象。

如何檢查Set是否已包含具有給定URL的Result。

如果集合已經包含帶有當前URL的Result對象,我只想將extra關鍵字添加到Set of keywords中,否則我創建一個新的Result對象以添加到Result of Result對象。

當您遍歷JDBC resultSet(創建自己的結果集)時,為什么不將它們放入Map? 事后創建Map:

Map<String, List<Result>> map = new HashMap<String, List<Result>>();
for (Result r : resultSet) {
    if (map.containsKey(r.url)) {
        map.get(r.url).add(r);
    } else {
        List<Result> list = new ArrayList<Result>();
        list.add(r);
        map.put(r.url, list);
    }
}

然后只需使用map.containsKey(url)進行檢查。

如果可能,我建議您更改數據庫設計以消除此問題。 您當前的設計要求每個關鍵字存儲一次id,url,title和date-time,如果你有很多關鍵詞,可能會浪費相當多的空間

我建議有兩張桌子。 假設id字段被保證是唯一的,第一個表將存儲id,url,title和date-time,並且每個id只有一行。 第二個表將存儲id和關鍵字。 您可以根據需要在此表中插入多行。

這有可能嗎/這有意義嗎?

您可以使用帶有URL的Map作為鍵:

Map<String, Result> map = new HashMap<String, Result>();

for (Result r : results) {
    if (map.containsKey(r.url)) {
        map.get(r.url).keywords.addAll(r.keywords);
    } else {
        map.put(r.url, r);
    }
}

我認為你需要在Result類的equals()方法上進行覆蓋。 在那種方法中,您將使用您的邏輯來檢查您要查找的內容。

注意您還需要知道覆蓋equals()方法,還需要覆蓋hashCode()方法。

欲了解更多關於“重寫equals()和hashCode()方法”主題,你可以看看一個問題。

暫無
暫無

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

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