【问题标题】:Removing first case insensitive duplicate of an ArrayList删除 ArrayList 的第一个不区分大小写的副本
【发布时间】:2019-05-07 11:06:24
【问题描述】:

我有一个包含一些字符串的数组列表:

ArrayList<String> strList = new ArrayList<String>();
strList.addAll(Arrays.asList("interface", "list", "Primitive", "class", "primitive", "List", "Interface", "lIst", "Primitive"));

我写了一个删除arraylist不区分大小写字符串的方法:

public static ArrayList<String> removeDuplicates(ArrayList<String> strList) {

    for(int i = 0; i < strList.size(); i++) {
        for(int j = i + 1; j < strList.size(); j++) {
            if(strList.get(i).equalsIgnoreCase(strList.get(j))){
                strList.remove(j);
                j--;
            }
        }
    }
    return strList;   
}

输出:

[interface, list, Primitive, class]

但是,我试图只删除第一次出现的字符串。我正在努力使我的输出等于:

[Interface, lIst, Primitive, class]

这将是数组列表中最后一次出现的重复项

我正在尝试做什么:

剩余的字符串版本与上次出现的版本相同。换句话说, 最后一次出现的版本停留在第一次出现的位置

【问题讨论】:

    标签: java string arraylist


    【解决方案1】:

    我认为从ArrayList 中删除不是一个好主意。最好使用Map 创建新列表:

    public static List<String> removeDuplicates(List<String> strList) {
        Map<String, String> map = new LinkedHashMap<>();
        strList.forEach(item -> map.put(item.toLowerCase(), item));
        return new ArrayList<>(map.values());
    }
    

    输入: [interface, list, Primitive, class, primitive, List, Interface, lIst, Primitive]

    输出: [Interface, lIst, Primitive, class]

    附言

    Stream 的一行相同,但有点不太清楚:

    public static List<String> removeDuplicates(List<String> strList) {
        return new ArrayList<>(strList.stream().collect(Collectors.toMap(String::toLowerCase, str -> str, (prev, next) -> next, LinkedHashMap::new)).values());
    }
    

    【讨论】:

      【解决方案2】:

      现在它保留第一次出现,所以如果你想保留最后一次出现,你可以反向浏览列表:

      for(int i = strList.size() - 1; i >= 0; i--) {
          for(int j = i - 1; j >= 0; j--) {
          ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        • 2012-02-03
        • 2012-01-31
        • 1970-01-01
        相关资源
        最近更新 更多