如何从两个不同的列表中删除重复项?

时间:2017-10-02 00:45:19

标签: java list compare

我在java中有两个列表,我需要删除重复项。一个列表包含一个包含三个字段的类(UrlInfo),另一个包含一个字符串列表。我需要将字符串列表与类中的字段进行比较,并从包含该类的列表中删除重复项。

这就是我现在所拥有的。

String urlString;
for (UrlInfo url : urlClass) {
  urlString = url.getUrl();
  for (int i = 0; i < storedUrlList.size(); i++) {
    if (urlString.equals(storedUrlList.get(i))) {
      urlClass.remove(url);
    }
  }
}

这对我来说非常缓慢。我将使用的列表将包含超过100,000个元素。

2 个答案:

答案 0 :(得分:0)

我首先迭代List检查它们是否与List匹配,如果是,我将它们存储在List中,然后像这样调用removeAll():

@Override
public void onClick(View view, int position) {
    SearchVehicleResponse.PromotionDetail promotionDetail = mPromoList.get(position);
    if(hasActivity())
    PromoCodeDialogFragment.newInstance(promotionDetail.promotionOffer, mBinding.vehicleId.getText().toString()).show(getActivity().getSupportFragmentManager(), "promo");
}

答案 1 :(得分:0)

由于要比较的列表storedUrlList是字符串列表,因此您可以使用方法List#contains(Object)来实现比较,并从原始列表urlClasses中删除元素。

在Java 7中:

ListIterator<UrlClass> iterator = urlClasses.listIterator();
while (iterator.hasNext()) {
  UrlClass u = iterator.next();
  if (storedUrlList.contains(u.getUrl())) {
    iterator.remove();
  }
}

在Java 8中:

urlClasses.removeIf(u -> storedUrlList.contains(u.getUrl()));