[英]How to check in java if Set contains object with some string value?
[英]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.