Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查集合是否包含一个成员变量等于某个值的对象_Java_Set_Contains - Fatal编程技术网

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

我有一组java结果对象。我的结果类定义如下所示:

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()方法”主题的更多信息,您可以查看另一个问题。

规范化是您的朋友


这是有道理的,但会减慢查询速度。我想知道是否有一个明显的解决办法。我可以把一些笨重但有效的东西组合起来。