我试图从我的名单中删除所有18岁以下的人,因此我有一个班上的人,这是我在我的主要工作中尝试的:
import java.util.*;
public class Main {
public static void main(String[] args) {
Person person1 = new Person("Victor", 28, "meerdonk");
Person person2 = new Person("Alex", 17, "antwerpen");
Person person3 = new Person("Vlad", 15, "mechelen");
List<Person> listOfPersons = List.of(person1, person2, person3);
List<Person> adults = getLessThen18(listOfPersons); **//line 22**
System.out.println(adults);
}
public static List<Person> getLessThen18(List<Person> personList) {
for (Iterator<Person> iterator = personList.listIterator(); iterator.hasNext();){
if (iterator.next().getAge() < 18 ) {
iterator.remove(); **//line 40**
}
}
return personList;
}
}
所以我试着在名单上重复,然后如果这个人在18岁以下,就把它删除。在运行代码时,我得到以下输出:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)
at java.base/java.util.ImmutableCollections$ListItr.remove(ImmutableCollections.java:380)
at victor.Main.getLessThen18Iteration(Main.java:40)
at victor.Main.main(Main.java:22)
有人能告诉我我做错了什么吗?
这里的问题是列表。属于
。它返回一个不可修改的列表:不能添加、删除或替换元素。
因此,当您尝试调用诸如iterator.remove();
这样的函数时,您会得到一个异常。
有以下几种解决方案:
>
通过使用复制构造函数将不可变列表的元素复制到可变列表,创建可变列表:
列表
过滤现有列表并创建一个新列表(保留原始列表):
返回个人列表。流()。过滤器(人)-
-立即使用
数组创建可变列表。asList
(返回一个
ArrayList
)
列表listOfPersons=Arrays。asList(人员1、人员2、人员3)`
编辑:
数组。asList创建了一个ArrayList,但它是一个不同于任何人想象的类(在
数组
中的私有静态类)。。
您的代码(List.of
)创建了一个不可变的人员列表:
List<Person> listOfPersons = List.of(person1, person2, person3);
因此,调用remove/add将导致一个异常——就像您的情况一样。
此外,您的方法名称也会产生误导,因为您正在更改/变异传递的列表参数,而不是返回新列表(如返回值所示)。
一种可能的方法是:
public static List<Person> getLessThen18(List<Person> personList) {
return personList.stream()
.filter(person -> person.getAge() < 18)
.collect(Collectors.toList());
}
问题内容: 我想开发一个模块控制系统,以便每个Spring bean都可以由我自己的LifeCycle Controller进行管理。 但是我不知道如何从ApplicationContext中删除单例spring bean。 那可能是一个有趣的问题,您能帮我解决吗? 问题答案: 你可以尝试删除Bean定义。取得并致电 这取决于创建应用程序的方式,但是例如在Web应用程序中,可以通过以下方式获取定义
问题内容: 在页面中,我放置了一些不需要的行,因此,如何使用HTML删除这些链接? 问题答案: 内联版本: 但是请记住,通常应该将网站的内容HTML分开。因此,通常应避免使用内联样式。 请参阅John的答案,以了解使用CSS的等效答案。
我要删除下划线。 这是我的代码:
问题内容: 我将列表添加到sessionStorage像: 及其工作正常,现在我想通过productId从此列表中删除单个对象。 问题答案: 请参阅以下文章:http : //www.nczonline.net/blog/2009/07/21/introduction-to- sessionstorage/ 如果要从会话存储中删除指定键/值对,则需要如下所示: 对于您的情况: 此外,适当的实现允许
问题内容: 起初,我使用了网格。创建新版本的GWT后,我想替换CellTable上的Grid。 问题答案: 查看javadoc以获取详细信息。我的示例就像您可以在此处找到的示例(稍稍扩展一下):
问题内容: 列出以下MySql命令之间的区别。 删除表 tablename ; 截断表 tablename ; 从 表名 中删除1; 另外,请根据您的经验告诉我每种产品的典型使用场景。 问题答案: 在此之后,它 消失了 。没有桌子了。没有更多数据。 当您不再需要该表时,请使用它。 此后,该表为空,并且(重要地)自动递增键被重置为1。从字面上看,这就像拥有一个全新的表。 当您只需要一个空表时,请使用