我有一个具有以下属性的类 FilterEvent
filterId
filterValue
filterType
假设我有一个名为FilterEvent
的{{1}}列表。
我需要从列表的每个对象中删除filterId。
我尝试过以下方式
filterEvents
将filterId字段设置为null。由于我的filterId字段为int类型,因此无法使用。
我需要将 filterId 设置为空,或者需要删除字段本身。
答案 0 :(得分:3)
map
不起作用,因为它是中间操作,因此除非执行某些终端操作,否则它将不会执行。
使用forEach
:
Set<FilterEvent> filterEvents = preparation.getFilterEvents();
filterEvents.forEach(f->f.setFilterId(null));
但是,如果setFilterId
期望一个int
,则不能传递null
。您必须将其设置为其他某个值(0?)。
答案 1 :(得分:2)
int
是原始类型,因此如果要设置null
,则将其数据类型从int
更改为Integer
和
filterEvents.stream().forEach(f->f.setFilterId(null));
或者如果您不想更改数据类型,请设置其默认值,即0或-1。
答案 2 :(得分:2)
Java约束是原始整数不能为null。
您的问题不在于错误的流映射。它在您的 FilterEvent 类的int属性类型中。 Java约束是原始类型(int,long,boolean ...)不能为null。
您有2个选择:
顺便说一句。您应该收集流或使用forEach。
答案 3 :(得分:0)
您不能从对象中删除字段。 FilterEvent
类表示具有这三个字段的对象。因此,没有filterId
字段的对象不是FilterEvent
对象。您可以创建另一个表示FilterEvent
的简化版本的类;我们称之为FilterEventValueAndType
。然后,使用相关的构造函数和获取方法,您可以这样做:
Set<FilterEvent> filterEvents = preparation.getFilterEvents();
Set<FilterEventValueAndType> fevat = filterEvents.stream()
.map(f->new FilterEventValueAndType(f))
.collect(toSet());