我想检查List<String>
是否包含重复项忽略大小写
我明白我可以编写像
这样的结构for(...){
for(...){}
}
但我想找到更好的方式
答案 0 :(得分:4)
您可以使用大写的List
创建String
然后将这些元素收集到Set
中,删除所有重复项
最后,将Set
的大小与List
的大小进行比较:如果大小不同,则表示您至少有一个副本。
可执行代码:
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class RemoveDuplicateInsensitiveCaseString {
public static void main(String[] args) {
List<String> list = Arrays.asList("abort", "Abort", "accent", "ACCENT");
Set<String> set = list.stream().map(String::toUpperCase).collect(Collectors.toSet());
if (set.size() != list.size()){
// you have duplicate
System.out.println(set);
}
}
}
输出:
[ACCENT,ABORT]
答案 1 :(得分:3)
使用不区分大小写的比较器将输入列表添加到TreeSet
,然后检查大小:
List<String> input = Arrays.asList("a", "A", "b");
Set<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
set.addAll(input);
boolean containsDuplicates = input.size() != set.size();
更新:Run it here。
答案 2 :(得分:1)
List<String> origList;
Set<String> exists = new HashSet();
boolean dup = false;
for (String s : origList) {
if (!exists.add(s.toLower()) {
dup = true;
break;
}
}
// dup param will have your answer