如何从对象列表的每个对象中删除字段?

时间:2018-11-14 12:46:00

标签: java spring

我有一个具有以下属性的类 FilterEvent

filterId
filterValue
filterType

假设我有一个名为FilterEvent的{​​{1}}列表。

我需要从列表的每个对象中删除filterId。

我尝试过以下方式

filterEvents

将filterId字段设置为null。由于我的filterId字段为int类型,因此无法使用。

我需要将 filterId 设置为,或者需要删除字段本身。

4 个答案:

答案 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个选择:

  • 您可以将 FilterEvent 类的 filterId 属性更改为Integer类型,该类型可以作为对象引用/设置为 null
  • 或在 f.setFilterId(null)中设置 0 而不是 null

顺便说一句。您应该收集流或使用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());