gpt4 book ai didi

java - 在 Java 中按属性映射对象集合

转载 作者:行者123 更新时间:2023-11-30 08:46:03 24 4
gpt4 key购买 nike

我有一个这样的自定义类:

public class Client {
public int ID;
public String Name;
public double buys;
public double getBuys() {
return this.buys;
}
}

然后,我定义了一个客户端列表,例如:

List<Client> clientList;

假设 List 有很多客户端对象,已经初始化。如何使用 Java 8 映射每个客户端对象的“购买”字段?

我试过类似的方法:

List<Client> clientList2 = clientList.stream().map(c.getBuys() -> c.getBuys() + 1).collect(Collections.toList());

当然,它不起作用,但我想不出(或找到)任何方法来做到这一点。我想要做的只是修改列表中每个对象的每个“购买”值。在示例中,我添加了一个,但它可以是任何操作。

最佳答案

阅读您的评论后,您想要的是通过应用自定义函数来修改每个客户的购买量。考虑以下方法:

private static List<Client> mapClients(List<Client> clients, DoubleUnaryOperator op) {
return clients.stream()
.peek(c -> c.setBuys(op.applyAsDouble(c.getBuys())))
.collect(Collectors.toList());
}

或以下简单的 for 循环:

private static List<Client> mapClients(List<Client> clients, DoubleUnaryOperator op) {
for (Client client : clients) {
client.setBuys(op.applyAsDouble(client.getBuys()))
}
return clients;
}

此方法将改变每个客户端并使用运算符的结果设置购买(DoubleUnaryOperator 是一个以 double 作为参数并返回类型值的运算符 double )。运营商将购买量作为输入进行计算。然后,您可以像这样使用它:

mapClients(clients, d -> d + 1); // every buys are added 1
mapClients(clients, d -> 2*d); // every buys are multiplied by 2

请注意,此解决方案改变 现有对象,这不是一个好的做法。最好让 Client 的构造函数将购买作为输入并将操作结果映射到新的 Client,如下所示:

private static List<Client> mapClients(List<Client> clients, DoubleUnaryOperator op) {
return clients.stream()
.map(c -> new Client(op.applyAsDouble(c.getBuys())))
.collect(Collectors.toList());
}

关于java - 在 Java 中按属性映射对象集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com