你好社区我有一个问题,我碰巧在启动时加载了一个对象数组,通过生成数组包含你的代码的另一个整数数组,似乎整数数组删除它们的值,我想要的是比较当前具有的整数数组的列表与对象数组,并删除找到的整个数组所有的代码对象。
我的代码java:
private List<ValidColumnKey> columnCustomer;
private int[] selectedCustomer;
public void init(){
this.setColumnCustomer(new ArrayList<ValidColumnKey>());
this.getColumnCustomer().add(new ValidColumnKey(1, "Codigo", "code"));
this.getColumnCustomer().add(new ValidColumnKey(2, "Nombre", "name"));
this.getColumnCustomer().add(new ValidColumnKey(3, "Nombre Comercial", "comercialName"));
this.getColumnCustomer().add(new ValidColumnKey(4, "Estado", "isActive"));
this.setSelectedCustomer(new int [this.getColumnCustomer().size()]);
int i = 0;
for(ValidColumnKey column : this.getColumnCustomer()){
this.getSelectedCustomer()[i] = column.getCodigo();
i++;
}
}
我的意思是我会删除代码的整数数组,如下所示:
selectedCustomer = [1, 2, 3];
我想要的是从整数数组中没有代码的对象列表中删除,但它不是我的代码:
List<ValidColumnKey> auxRemoColumnKeys = new ArrayList<ValidColumnKey>();
for(ValidColumnKey column : this.getColumnCustomer()){
for(Integer codigo : this.getSelectedCustomer()){
if (column.getCodigo() != codigo) {
auxRemoColumnKeys.add(column);
break;
}
}
}
this.getColumnCustomer().remove(auxRemoColumnKeys);
我可以指导解决方案。
答案 0 :(得分:0)
this.getColumnCustomer().remove(auxRemoColumnKeys);
此声明假定您的班级equals
有一个有效的ValidColumnKey
方法,我怀疑可能不是这种情况。
您要做的是使用Iterator
进行迭代。一些示例代码可能像
Set<Integer> toRemoveCodes = new HashSet<Integer>(Arrays.asList(1, 2, 3));
for (Iterator<ValidColumnKey> it = this.getColumnCustomer().iterator(); it.hasNext(); ) {
ValidColumnKey curColumnKey = it.next();
Integer code = curColumnKey.codigo();
if (toRemoveCodes.contains(code)) {
it.remove();
}
}
答案 1 :(得分:0)
目前的尝试失败有多种原因。首先是这一行:
if (column.getCodigo() != codigo) {
测试Integer
之间的对象等价,而不是int
之间的值等价。如果你想比较Integer
s,你必须使用equals方法:
if (!column.getCodigo().equals(codigo)) {
但是,如果getCodigo
返回int
而getSelectedCustomer
返回int[]
,则应更改此行:
for(int codigo : this.getSelectedCustomer()){
因为您首先不需要使用Integer
。
其次,此行尝试删除auxRemoColumnKeys本身,因此您可能意味着removeAll
:
this.getColumnCustomer().remove(auxRemoColumnKeys);
最后,你的逻辑通常是有缺陷的。它基本上对getColumnCustomer中的每个元素说“,如果getCodigo不等于getSelectedCustomer的全部删除它”。我认为这不是你想要的。
这是一个修改过的循环,使用相同的“添加到列表并删除列表项”过程,但逻辑将起作用:
List<ValidColumnKey> auxRemoColumnKeys = new ArrayList<ValidColumnKey>();
int[] selected = this.getSelectedCustomer();
for (ValidColumnKey column : this.getColumnCustomer()) {
int i = 0;
for ( ; i < selected.length; i++) {
/* note: if getCodigo returns an Integer change this check to
* "if (column.getCodigo().equals(selected[i])) {"
*/
if (column.getCodigo() == selected[i]) {
break;
}
}
/* this says "if the search loop did not break early" */
if (i == selected.length) {
auxRemoColumnKeys.add(column);
}
}
this.getColumnCustomer().removeAll(auxRemoColumnKeys);