我有两个arrayList,我需要比较它们,获取唯一的值并用它们构建一个新的数组,问题是一些值是相同的,但大写,因此它们不应显示为唯一值。这是我的代码,工作正常,但速度慢

for (i = 0; i < parsedLocal.size(); i++) {
  for (j = 0; j < parsedRemote.size(); j++) {
     if (parsedLocal[i].toUpperCase().equals(parsedRemote[j].toUpperCase())){
        parsedLocal.remove(parsedLocal[i])
    }
  }
}


然后,我发现此解决方案速度更快,但不比较大写或小写字母,是否知道如何使用该方法或类似方法呢?

parsedLocal.removeAll(parsedRemote);

最佳答案

以下常规代码应计算差值(请注意,返回的集合将包含大写值):

parsedLocal*.toUpperCase() - parsedRemote*.toUpperCase()


但是您也可以使用基于流的计算。这具有稍微更高的空间复杂度,但应具有线性时间复杂度:

Set<String> set1 = parsedLocal.stream()
        .map{it.toUpperCase()}
        .collect(Collectors.toSet());
List<String> retained = parsedRemote.stream()
        .filter{!set1.contains(it.toUpperCase())}
        .collect(Collectors.toList());

07-27 13:21