java 两个list 实体合并去重

引言

在Java开发中,我们经常需要对多个List进行合并,并且去除重复的元素。这种需求在实际工作中是非常常见的。本文将介绍如何使用Java的集合类库来实现这一功能,同时提供代码示例和详细的解释。

问题描述

假设我们有两个List,分别为listA和listB,它们的元素类型为实体类Entity。现在的问题是,我们需要将这两个List合并成一个新的List,并且去除重复的实体。

解决方案

我们可以使用Java的集合类库来解决这个问题。具体的步骤如下:

  1. 创建一个新的List,用于存放合并后的结果。
  2. 将listA中的元素逐个添加到结果List中。
  3. 遍历listB中的元素,判断是否已经存在于结果List中,如果不存在则添加到结果List中。
  4. 返回结果List作为合并后的结果。

下面是一个示例代码:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Entity {
    private int id;
    private String name;

    public Entity(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // 省略getter和setter方法

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Entity entity = (Entity) obj;
        return id == entity.id && name.equals(entity.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }
}

public class MergeListExample {
    public static void main(String[] args) {
        List<Entity> listA = new ArrayList<>();
        listA.add(new Entity(1, "A"));
        listA.add(new Entity(2, "B"));

        List<Entity> listB = new ArrayList<>();
        listB.add(new Entity(2, "B"));
        listB.add(new Entity(3, "C"));

        List<Entity> mergedList = mergeList(listA, listB);
        System.out.println(mergedList);
    }

    public static List<Entity> mergeList(List<Entity> listA, List<Entity> listB) {
        Set<Entity> resultSet = new HashSet<>();
        resultSet.addAll(listA);
        resultSet.addAll(listB);
        return new ArrayList<>(resultSet);
    }
}

在上面的代码中,我们定义了一个实体类Entity,包含id和name两个属性,并重写了equals和hashCode方法,以便在去重时能够正确判断两个实体是否相等。

然后,我们创建了两个List,分别为listA和listB,分别向其中添加了一些实体。

接下来,我们调用了mergeList方法,将listA和listB作为参数传入。在mergeList方法中,我们使用一个HashSet来存放合并后的结果,通过addAll方法将listA和listB中的元素都添加到resultSet中。由于HashSet会自动去重,所以合并后的结果中不会包含重复的元素。

最后,我们将resultSet转换为一个新的ArrayList,并将其作为mergeList方法的返回结果。

类图

下面是Entity类的类图:

classDiagram
    class Entity {
        - id : int
        - name : String
        + Entity(int, String)
        + getId() : int
        + setId(int) : void
        + getName() : String
        + setName(String) : void
        + equals(Object) : boolean
        + hashCode() : int
    }

总结

本文介绍了如何使用Java的集合类库来合并两个List,并且去除重复的元素。我们通过一个实例来演示了具体的步骤,并提供了相应的代码示例。同时,我们还给出了Entity类的类图,以帮助读者更好地理解代码结构。

通过本文的学习,读者应该能够掌握如何使用Java的集合类库来实现List的合并和去重功能。希望本文对您的学习和工作有所帮助!