尝试使用 setter 方法映射对象列表时出现错误

问题描述 投票:0回答:2

我正在尝试绘制以下列表:

mappedCustomers = customers.stream().map(e ->e.setLastName("e")).collect(Collectors.toList());

客户等级

@Entity
@Table(name = "customer")
public class Customer {

@Id
@GeneratedValue
Long id;

String firstName;

String lastName;

public Long getId() {
    return id;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

}

但我收到此错误:

不存在类型变量 R 的实例,因此 void 符合 R enter image description here

java list java-stream
2个回答
2
投票

Stream API 中的 Map 函数需要一个返回值的函数。

<R> Stream<R> map(Function<? super T,? extends R> mapper)

但是setter返回值是void(根本没有返回值),因此你的代码不符合map方法签名,如果你想迭代一个集合并执行一个操作,你可以使用forEach

void forEach(Consumer<? super T> action)

无需进行收集,因为您的初始收集将是相同的,但它将包含您的修改。

customers.stream().forEach(x -> x.setLastName("e"))

1
投票

map()
返回一个新流,因此您可以根据需要链接另一个操作,但是您的映射方法必须返回一些内容才能使其工作。 由于您提供了一个返回
void
的 setter,因此您的代码将无法编译。

就你而言,

forEach()
会更简单。

customers.stream().forEach(e -> e.setLastName("e"));
© www.soinside.com 2019 - 2024. All rights reserved.