Java 如何检查集合是否包含一个成员变量等于某个值的对象
我有一组java结果对象。我的结果类定义如下所示:Java 如何检查集合是否包含一个成员变量等于某个值的对象,java,set,contains,Java,Set,Contains,我有一组java结果对象。我的结果类定义如下所示: private String url; private String title; private Set<String> keywords; 私有字符串url; 私有字符串标题; 私有集关键字; 我将信息存储在一个名为Keywords的数据库表中,如下所示 关键词=[id,url,标题,关键词,日期时间] 正如您所看到的,在对象和数据库中的行之间没有一对一的映射。我正在使用SQL(MySQL DB)来提取值,并有一个合适的Re
private String url;
private String title;
private Set<String> keywords;
私有字符串url;
私有字符串标题;
私有集关键字;
我将信息存储在一个名为Keywords的数据库表中,如下所示
关键词=[id,url,标题,关键词,日期时间]
正如您所看到的,在对象和数据库中的行之间没有一对一的映射。我正在使用SQL(MySQL DB)来提取值,并有一个合适的ResultSet对象
如何检查集合是否已包含具有给定URL的结果
如果集合已包含具有当前URL的结果对象,我只想将额外的关键字添加到关键字集合中,否则我将创建一个新的结果对象以添加到结果对象集合中。如果可能,我建议更改数据库设计以消除此问题。您当前的设计要求每个关键字存储一次id、url、标题和日期时间,如果关键字太多,可能会浪费大量空间 我建议有两张桌子。假设id字段被保证是唯一的,第一个表将存储id、url、标题和日期时间,并且每个id只有一行。第二个表将存储id和关键字。您可以根据需要在此表中插入多行
这可能吗/这有意义吗?当您迭代JDBC结果集(创建您自己的结果集)时,为什么不将它们放到映射中呢?要在事件发生后创建地图,请执行以下操作:
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 Map=newhashmap();
对于(结果r:resultSet){
if(map.containsKey(r.url)){
map.get(r.url).add(r);
}否则{
列表=新的ArrayList();
列表。添加(r);
map.put(r.url,list);
}
}
然后只需使用
map.containsKey(url)
进行检查。您可以使用带有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);
}
}
Map Map=newhashmap();
对于(结果r:结果){
if(map.containsKey(r.url)){
map.get(r.url).keywords.addAll(r.keywords);
}否则{
map.put(r.url,r);
}
}
我认为需要对结果类的equals()方法进行重写。在这种方法中,你将把你的逻辑,将检查你在寻找什么
注意:您还需要知道,重写equals()方法时,还需要重写hashCode()方法
有关“重写equals()和hashCode()方法”主题的更多信息,您可以查看另一个问题。规范化是您的朋友
这是有道理的,但会减慢查询速度。我想知道是否有一个明显的解决办法。我可以把一些笨重但有效的东西组合起来。