我有一个可能包含重复值的ArrayList tmp_list
。我的目标是填充另一个ArrayList filtered_tmp_list
,每个值只出现一次。这是我做的:
ArrayList<String> filtered_tmp_list = new ArrayList<String>();
filtered_tmp_list.add((String) tmp_list.get(0));
for(int i=0; i<tmp_list.size(); i++){
String cmp = (String) tmp_list.get(i) ;
int doubled = 0;
for(int j=0; j<filtered_tmp_list.size(); j++){
String cmpd = (String) tmp_list.get(j) ;
if(cmp.compareTo(cmpd)==0){
doubled ++ ;
}
}
if(doubled==0) filtered_tmp_list.add(cmp);
}
我的想法是检查filtered_tmp_list
中的值是否已经tmp_list
多次出现,如果是这样,我什么都不做,否则:如果doubled等于零,则意味着值应该插入filtered_tmp_list
。
嗯,正如你所料,我在这里是因为我得到重复的价值...... 我错过了什么?
感谢。
答案 0 :(得分:6)
你走了:
Replace below code it works:
for(int j=0; j<filtered_tmp_list.size(); j++){
**String cmpd = (String) filtered_tmp_list.get(j) ;**
if(cmp.compareTo(cmpd)==0){
doubled ++ ;
}
}
答案 1 :(得分:3)
使用Set
然后List
:
List<String> ret = new ArrayList<>(new HashSet<>(origList));
Set
不能包含重复元素;自HashSet
实施String
和.equals()
以来,使用.hashCode()
。
如果您想在初始列表中保留元素的原始顺序,请将HashSet
替换为LinkedHashSet
。
(如果这不是Java 7,请用String
填充空白钻石
编辑:请参阅@ zerocool关于原始代码
的错误的答案答案 2 :(得分:1)
如果您担心插入顺序
List<String> ret = new ArrayList<String>(new LinkedHashSet<String>(origList));