加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java中,是否有更优雅的方法从Strings的ArrayList中删除重复的

发布时间:2020-12-14 23:21:43 所属栏目:Java 来源:网络整理
导读:所以,简而言之,我有一个 Java作业分配,需要以各种方式操作字符串的长ArrayList(我们正在做的事情,如显示单词的组合,添加和从ArrayList中删除,没有什么特别的).我注意到一些提供的ArrayLists有重复的条目(这个分配不需要重复项),所以我从老师那里得到了通过删
所以,简而言之,我有一个 Java作业分配,需要以各种方式操作字符串的长ArrayList(我们正在做的事情,如显示单词的组合,添加和从ArrayList中删除,没有什么特别的).我注意到一些提供的ArrayLists有重复的条目(这个分配不需要重复项),所以我从老师那里得到了通过删除重复条目来清理数据的好处.
这是我想出的:
private static ArrayList<String> KillDups(ArrayList<String> ListOfStrings) {  

    for (int i = 0 ; i < ListOfStrings.size(); i++) {
        for (int j = i + 1; j < ListOfStrings.size(); j++) {
            //don't start on the same word or you'll eliminate it.
            if ( ListOfStrings.get(i).toString().equalsIgnoreCase( ListOfStrings.get(j).toString() )  ) {
                ListOfStrings.remove(j);//if they are the same,DITCH ONE.
                j = j -1; //removing the word basically changes the index,so swing down one.
            }                                
        }
    }
    return ListOfStrings;
}

这对我的任务很好,但我怀疑它在现实世界中会非常有用.有没有办法在比较期间忽略空格和特殊字符?是否有更清洁的方法来处理这个问题(可能没有嵌套的For循环)?还有其他问题我应该问我不知道要问吗?

解决方法

是.它可以在1(优雅)线上完成:
List<String> noDups = new ArrayList<String>(new LinkedHashSet<String>(list));

中间体Set确保没有重复.选择Set的LinkedHashSet实现以保留列表的顺序.

另外,在样式说明上:

>使用以小写字母开头的名称命名方法和参数
>在指定方法签名时,始终引用抽象(即List)而不是具体(即ArrayList)

那么你的整个方法是:

private static List<String> killDups(List<String> list) {
    return new ArrayList<String>(new LinkedHashSet<String>(list));
}

对于额外的brownie points,使方法通用,因此它适用于任何类型的List:

private static <T> List<T> killDups(List<T> list) {
    return new ArrayList<T>(new LinkedHashSet<T>(list));
}

如果你想忽略某些字符,我会为它创建一个类,并列出这些字符. HashSets依赖于hashCode()equals()方法来删除重复:

public class MungedString {
    // simplified code
    String s;

    public boolean equals(Object o) {
        // implement how you want to compare them here
    }

    public int hashCode() {
        // keep this consistent with equals()
    }
}

然后

List<MungedString> list;
List<MungedString> noDupList = killDups(list);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读