Collections 我们能用dynamic equals方法比较两个java集合吗?

Collections 我们能用dynamic equals方法比较两个java集合吗?,collections,apache-commons,Collections,Apache Commons,假设我们有一个“客户端”对象: 我只提到了下面“客户端”对象的属性和equals方法!! 从上面的equals方法中可以清楚地看出,如果两个对象的所有属性都相同,“两个”客户机对象被称为相等 现在假设一个场景,我需要比较两个名为say incomingClients和existingClients的集合。 第一个collectionCollection IncomingClient是在从csv/xls文件读取“客户端”数据后生成的。 第二个collectionCollection Existin

假设我们有一个“客户端”对象:

我只提到了下面“客户端”对象的属性和equals方法!! 从上面的equals方法中可以清楚地看出,如果两个对象的所有属性都相同,“两个”客户机对象被称为相等

现在假设一个场景,我需要比较两个名为say incomingClients和existingClients的集合。 第一个collectionCollection IncomingClient是在从csv/xls文件读取“客户端”数据后生成的。 第二个collectionCollection ExistingClient包含系统中当前的所有现有客户端

我可以使用ApacheCollectionUtilst执行以下代码以获取“公共”客户端

Collection<Client> commonClients = (Collection<Client>)CollectionUtils.intersection(incomingClients,existingClients);
删除“公共客户端对象”的目的是,我们不需要对这些记录进行“任何处理”, 因为我们对这些记录一点也不感兴趣

现在,我如何确定“Collection incomingClients”集合中哪些是全新的“新客户”? 当我说“new”时,它意味着一个客户端拥有一个新的“clientId”,而这个新的“clientId”并不存在于“Collection ExistingClient”中

此外,我如何确定哪些客户需要“修改” 当我说“修改”时,它意味着“集合incomingClients”和集合existingClients” 拥有相同的clientId,但是,比如说,不同的“clientName”

我知道我们可以在下面进行正常的“for”循环检查,以确定“新的”/“需要修改的”客户机

Collection<Client> commonClients = (Collection<Client>)CollectionUtils.intersection(incomingClients,existingClients);
但是我想写一些“新东西”,看看我们是否可以使用“ApacheCollectionUtils”包中的一些类/函数来实现这一点。 我是不是把一件简单的事情“复杂化”??
有什么想法吗?

首先,是的,你把简单的事情复杂化了。你的整个问题可以总结如下:

给定集合A和集合B,如何使用CollectionUtils获得以下内容:

A-B,使用确定等式的特定函数 A.∩B、 使用确定相等性的特定函数 所以,是的。CollectionUtils具有您需要的功能。查看CollectionUtils.select

incomingClients.removeAll(commonClients);
existingClients.removeAll(commonClients);
Collection<Client> newClients = new ArrayList<Client>();
Collection<Client> toBeModifiedClients = new ArrayList<Client>();
boolean foundClient = false;
Client client = null;
for(Client incomingClient :incomingClients){
    foundClient = false;
    for(Client existingClient : existingClients){
    if(existingClient.getClientId().equals(incomingClient.getClientId())){
        client = existingClient;
        foundClient = true;
        break;
    }
   }
   if(foundClient){
        toBeModifiedClients.add(client);
    }else{
        //not found in existing. so this is completely new
        newClients.add(incomingClient);
    }
}