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()返回的列表不支持结构(添加或删除)操作。它及其迭代器仅支持替换现有元素。