如何检查List <string>是否包含重复项忽略大小写

时间:2017-09-13 13:32:57

标签: java string list collections duplicates

我想检查List<String>是否包含重复项忽略大小写

我明白我可以编写像

这样的结构
for(...){
   for(...){} 
}

但我想找到更好的方式

3 个答案:

答案 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