按元素比较List <mylist>

时间:2017-11-01 13:57:10

标签: java

我有两个枚举列表。我想在另一个中从List中搜索字符串值。

public class AzureFileModel {
    public String imageName;
    public String classifierClass ="";
    public double score;
}
public class WatsonFileModel {
    public String imageName;
    public String classifierClass ="";
    public double score;
}
private List<WatsonFileModel> watsonFileModelList = new ArrayList<>();    
private List<AzureFileModel> azureFileModelList = new ArrayList<>();

如何以有效的方式比较两个相同图像名称的列表?

当前方法

我有一个列表,列出了每个列表中的所有图像名称,我通过迭代一个列表来检查图像名称是否与另一个匹配。

示例数据

AzureFileModelList
{
  [imagename=image1,class=football,score=9.87],
  [imagename=image2,class=tennis,score=9.7],
  [imagename=image1,class=tennis,score=0.87] //chances of same imagename
  [imagename=image3,class=football,score=9.87],  
}
WatsonFileModelList
{
  [imagename=image1,class=football,score=5.6],
  [imagename=image2,class=football,score=9.7],
  [imagename=image4,class=tennis,score=0.87]
}

最终结果

CombinedModelList{
 [imagename=image1,azureclass=football,azurescore=9.87,watsonclass=football, watsonscore =5.6],
 [imagename=image2,azureclass=tennis,azurescore=9.7,watsonclass=football,watsonscore=9.7]
}

2 个答案:

答案 0 :(得分:2)

为什么你需要两个具有完全相同字段的类?

同时成为一个班级。然后将Azure或Watson数据的实例存储在一个列表中

如果您需要在类中有所不同,则可以使用公共字段的抽象类

如果要比较对象,可能需要尝试实现Comparable接口

比较图像需要读取二进制数据,而不仅仅是文件名

答案 1 :(得分:0)

您可以使用Map代替List,并指定代表String的关键imageName
Map检索速度很快。

请注意,将父类引入这两个类以便以统一的方式操作它们也是一件好事:

Map<String, FileModel> fileModelsByImageName;

如果元素插入的顺序很重要,您可以实例化LinkedHashMap 否则,HashMap就足够了。