我有两个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());