Java 直接从数组中删除元素

Java 直接从数组中删除元素,java,arrays,list,collections,Java,Arrays,List,Collections,我有一个如下所示的数组: PersonClass[] person= { new PersonClass("90234234434", "John", "Smith", 22, "Street 22/5", 10//this is priority from 0 up to 10), ... ... }; 然后我搜索从98开始的安全ID for(int n = 0; n < person.length; n+

我有一个如下所示的数组:

PersonClass[] person= {
            new PersonClass("90234234434", "John", "Smith", 22, "Street 22/5", 10//this is priority from 0 up to 10),
            ...
            ...
    };
然后我搜索从98开始的安全ID

for(int n = 0; n < person.length; n++)
    {
        if(person[n].getSecId().contains("98"))
        {
            System.out.println(person[n].toString());s
            //delete this object from person array
        }
    }
for(int n=0;n

现在我的问题是:是否可以直接从数组中删除此对象,如果不可以,如何将其转换为集合(例如ArrayList)。

如果您使用的是Java 8,则可以使用:

person = Arrays.stream(person)
           .filter(p -> !p.getSecId().startsWith("98")) // note the not ! here
           .toArray(PersonClass[]::new);
还有一件事:

然后我搜索从98开始的安全ID

for(int n = 0; n < person.length; n++)
    {
        if(person[n].getSecId().contains("98"))
        {
            System.out.println(person[n].toString());s
            //delete this object from person array
        }
    }

在这种情况下,您可以将contains替换为startsWith
,只检查第一个字符。

您可以使用静态方法java.util.Arrays.asList()将数组转换为ArrayList

将其设置为
null
。GC将自己删除它。顺便说一句,可能的重复项。。如果你想检查ID是否以98开头,你应该使用
startsWith()
methodA备注:如果你想删除
Person
s,其中
secId
s以一些字符串开头,请使用而不是。我正在使用Java 8,这解决了我的问题,谢谢。请您解释一下它到底是如何工作的好吗?@G.Dawid这个想法很简单,您只需要过滤不以“98”开头的secId,然后将结果收集为数组,并将结果分配给第一个用户array@G.Dawid您想使用
过滤器
dropWhile
操作做了一些完全不同的事情。@G.Dawid,StuartMarks是正确的,在我阅读了我的答案后,我意识到第二种方法在您的应用程序中是不正确的case@StuartMarks您是对的,我完全忘记了
dropWhile
实用程序这是一个缺乏文档的实用程序,但是由array.asList()返回的列表不支持结构(添加或删除)操作。它及其迭代器仅支持替换现有元素。