[英]remove duplicates in list of object array in java
import java.util.ArrayList;
import java.util.List;
public class mainPage {
public static void main(String[] args) {
testMethod();
}
public static void testMethod() {
List<Object[]> obj = new ArrayList<Object[]>();
/*START: Populating obj with test data */
for (int i = 0; i <= 10; i++) {
if (i == 5 || i == 6) {
Object[] value = new Object[] { "hello", "world", "GoodEvening" };
obj.add(value);
} else {
Object[] value = new Object[] { "good", "morning", "helloo" };
obj.add(value);
}
}
/*END : Populating obj with test data */
for (Object[] jj : obj) {
System.out.println("values: " + jj[0] + " " + jj[1] + " " + jj[2]);
}
// need a List<Object[]> obj with out duplicates
}
}
以上代码的结果是,
values: good morning helloo
values: good morning helloo
values: good morning helloo
values: good morning helloo
values: good morning helloo
values: hello world GoodEvening
values: hello world GoodEvening
values: good morning helloo
values: good morning helloo
values: good morning helloo
values: good morning helloo
在这里,我生成了一个样本数据,并且我在项目中面临着类似的情况。
我想删除重复的记录,有效的方法是什么。
结果必须是:
values: hello world GoodEvening
values: good morning helloo
尝试:
List<Object[]> obj = new ArrayList<Object[]>();
// rest of your code goes here
Comparator<Object[]> comp = new Comparator<Object[]>(){
@Override
public int compare(Object[] o1, Object[] o2) {
if( o1.length != o2.length){
return o1.length - o2.length;
}
for( int i = 0; i < o1.length; i++){
int val = o1[i].toString().compareTo(o2[i].toString());
if( val != 0 ){
return val;
}
}
return 0;
}
};
Set<Object[]> mySet = new TreeSet<>( comp );
mySet.addAll(obj);
for (Object[] jj : mySet) {
System.out.println("values: " + jj[0] + " " + jj[1] + " " + jj[2]);
}
另一种方法,仍然是使用TreeSet
但是使用更干净的Comparator
:
for (int i = 0; i <= 10; i++) {
if (i == 5 || i == 6) {
obj.add(new Object[] { "hello", "world", "GoodEvening" });
} else {
obj.add(new Object[] { "good", "morning", "helloo" });
}
}
Set<Object[]> result = new TreeSet<>(new Comparator<Object[]>() {
@Override
public int compare(final Object[] o1, final Object[] o2) {
if (Arrays.equals(o1, o2)) {
return 0;
}
return Arrays.hashCode(o1) - Arrays.hashCode(o2);
}
});
result.addAll(obj);
for (Object[] array : result) {
System.out.println(Arrays.toString(array));
}
输出:
[hello, world, GoodEvening]
[good, morning, helloo]
一种实现方法是使用HashSet( https://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html )。 如果列表中已经有相同的元素,它将拒绝将项目添加到列表中。 但是,将不保留元素返回的顺序。 您可能必须为对象添加自己的equals方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.