java - 有没有办法从 Method[] 中删除对象

标签 java arrays

我对 Java 有点陌生,似乎找不到解决我的问题的好方法。 我加载了一个类并有一组规则,我想将该类的每个方法与之进行比较。

for(Method methods : methods){
     if(checkMethod(methods)){
         //Method is approved
      }
      else{
         //Method is not approved  
      }
}

我的问题是我想从现有的方法数组中删除该方法,或者将批准的方法添加到新数组并单独保存它们。 似乎 Method[] 无法删除其数组中的对象?当创建第二个数组然后使用类似的东西时:

if(checkMethod(methods)){
   approvedMethods[i] = methods;
}

感觉我做错了什么,第二个数组不包含任何已批准的方法。 是否可以从原始数组中删除一个对象,或者是创建第二个对象的正确方法,如果是这种情况,我该如何正确地将它们添加到新数组中?似乎找不到 approvedMethods.put()/add()

checkMethod()方法没有问题,通过多例测试,输出结果符合预期。

最佳答案

只是喜欢:

Method[] collect = Arrays.stream(array)
                         .filter(AccessibleObject::isAccessible)
                         .toArray(Method[]::new);

遍历数组methods,过滤所需的方法,并将它们返回到一个新数组中。

在 Java 中,您不能使用类似 remove 的方法从数组中删除。对于这种功能,请改用 ArrayList

如果你想使用数组,那么你必须这样做:

首先,找出接受方法的数量,以便您事先知道需要为数组分配多少空间:

int count = 0;
for(Method method : methods){
     if(checkMethod(methods)){
        count++;
      }
}

然后为那个数组分配空间:

Method[] approvedMethods = new Method[count];

现在添加适合您的约束的方法:

int i = 0;
for(Method method : methods){
     if(checkMethod(methods)){
        approvedMethods[i++] = method
      }
}

这种方法的缺点之一是它会遍历数组两次。

关于java - 有没有办法从 Method[] 中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65169450/

相关文章:

java - 确定 CORBA 连接的远程端口

java - ant 和 ant-nodeps 有什么区别?

arrays - 应使用什么语法来读取 Azure 数据工厂/Synapse 中“复制数据”事件的“映射”选项卡上数组的最后一行?

c - 如何在c中创建没有数据库的多变量数组

java - 如何在Java中自定义ThreadFactory的所有子线程的名称?

java - 从 csv 文件读取数据 - 未找到有效源的文件异常

java - 如何使用Java从视频中提取帧

c - 在 C 中声明和初始化未知大小的二维数组

html - 在 NSString 中搜索以特定文本开头并以 "结尾的单词

arrays - Angular 2 如何遍历多维数组?