我有两个列表
List<String> names1;
List<String> names2;
我希望您能给我返回一个包含两个列表中共同存在的数值的新列表。这些数值不应该像retainAll那样重复出现。
这是我的原始方法:
return ListUtils.intersection(names1, names2);
它能够正常工作。但是它是区分大小写的,所以AbC和abc不是相同的。我需要进行大小写不敏感的比较。是否有其他方法可以实现这一点?
我有两个列表
List<String> names1;
List<String> names2;
return ListUtils.intersection(names1, names2);
它能够正常工作。但是它是区分大小写的,所以AbC和abc不是相同的。我需要进行大小写不敏感的比较。是否有其他方法可以实现这一点?
Set<String>
中,转换为小写,例如:Set<String> lcNames2 =
names2.stream().map(String::toLowerCase).collect(Collectors.toSet());
然后:
List<String> intersection =
names2.stream()
.filter(n -> lcNames2.contains(n.toLowerCase())
.collect(Collectors.toList());
Lists.intersection
会将两个列表视为集合,因此它不会添加相同的元素两次。在使用交集方法之前,先制作一个小写副本:
return ListUtils.intersection(names1.stream().map(String::toLowerCase).collect(Collectors.toList()),
names2.stream().map(String::toLowerCase).collect(Collectors.toList()));
你可以事先遍历每个列表并将每个元素转换为小写,然后运行交集操作。
类似这样:
List<String> names1;
List<String> names2;
for(int i=0; i < names1.size(); i++){
names1[i] = names2[i].toLowerCase();
}
for(int i=0; i < names2.size(); i++){
names2[i] = names2[i].toLowerCase();
}
return ListUtils.intersection(names1, names2);
你需要查找如何更改列表中的值,我不记得它是否与数组相同或其他方法。你可能还需要在for循环条件中加上或减去1,因为我不确定.size()是否包括0。
你可以使用 retainAll
:
names1.retainAll(names2);
希望这能对你有所帮助!:)