Java集合处理: 两个集合去重复、或者交集

123 阅读1分钟

\

\

@EqualsAndHashCode(of = "vmId")
public class VirtualMachine {
    @Getter
    @Setter
    private Integer id;
    @Getter
    @Setter
    private String vmName;
    @Getter
    @Setter
    private String userFor;
    @Getter
    @Setter
    private Integer memory;
    @Getter
    @Setter
    private Integer cpu;
    @Getter
    @Setter
    private Integer hardDisk;
    @Getter
    @Setter
    private String templateGuid;
    @Getter
    @Setter
    private String vmId;

\

法一去重复:利用set的不可以存重复对象,去重复【对象要实现hashcode、equals】\

Set set = new HashSet();
for (Object object : virtualMachineList) {
    set.add(object);
}
for (Object object : listVms) {
    set.add(object);
}
System.out.println("***************::" + set.size());

法二去重复:

/**
 * 将列表中重复的虚拟机移除,重复指的是vmId相同
 *
 * @param vmList
 * @return
 */
public ArrayList<VirtualMachine> removeDuplicteVm(List<VirtualMachine> vmList) {
    Set<VirtualMachine> s = new TreeSet<VirtualMachine>(new Comparator<VirtualMachine>() {
        @Override
        public int compare(VirtualMachine o1, VirtualMachine o2) {
            System.out.println(o1.getVmId() + "|" + o2.getVmId());
            String v1 = o1.getVmId() != null ? o1.getVmId() : "0";
            String v2 = o2.getVmId() != null ? o2.getVmId() : "0";
            return v1.compareTo(v2);
        }
    });
    s.addAll(vmList);
    return new ArrayList<VirtualMachine>(s);
}

\

取交集::::::\

使用集合的自带方法,removeAll取交集\

virtualMachineList.removeAll(listVms);

\

\

\

\

\

\

\

\

\