所以我的String数组看起来像这样:
arraySubs:
math
math
math
web
web
web
prog
prog
prog
现在我想删除重复项,如下所示:
arraySubs:
math
web
prog
我不介意在应该删除的地方是否有空,所以我尝试了这个:
for(int j = 0; j < arraySubs.length; j++) {
if(j<arraySubs.length-1) {
if(arraySubs[j+1]==arraySubs[j]) {//equalsIgnoreCase doesn't work.
arraySubs[j]=null;
}
}
if(arraySubs[j]!=null) {
System.out.println(arraySubs[j]);
}
}
但它不起作用它仍然打印所有这些,任何想法? 我不想使用Set,HashSet等或任何其他工具,如迭代器。 equals()不起作用......
答案 0 :(得分:4)
如果您不想使用set
,可以使用stream
:
list.stream()
.distinct()
.collect(Collectors.toList());
但是,使用set将是最有效和最明确的。
答案 1 :(得分:1)
您可以将stream
与collect
一起使用。这样,您甚至可以维护每个元素的计数,例如:
String[] array = new String[]{"math", "math", "web"};
Map<String, Long> items = Arrays.stream(array)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(items);
System.out.println(items.keySet());
答案 2 :(得分:0)
执行arraySubs[j+1]==arraySubs[j]
时,比较实例ID而不是值。您应该使用arraySubs[j+1].equals(arraySubs[j])
尝试调试代码,或运行类似:
for(int j = 0; j < arraySubs.length; j++) {
if(j<arraySubs.length-1) {
System.out.println("j:" + j);
System.out.println("j val:" + arraySubs[j]);
System.out.println("j+1 val:" + arraySubs[j+1]);
if(arraySubs[j+1] != null && arraySubs[j+1].equalsIgnoreCase(arraySubs[j])) { // The FIX
System.out.println("j val changed to null");
arraySubs[j]=null;
}
}
if(arraySubs[j]!=null) {
System.out.println(arraySubs[j]);
} else {
System.out.println("skipping null");
}
}