我有一个像这样的自定义类:
public class Client {
public int ID;
public String Name;
public double buys;
public double getBuys() {
return this.buys;
}
}
然后,我定义了一个Client列表,如:
List<Client> clientList;
让我们说该List有很多已经初始化的客户端对象。如何绘制字段&#34;购买&#34;使用Java 8的每个客户端对象?
我尝试过类似的事情:
List<Client> clientList2 = clientList.stream().map(c.getBuys() -> c.getBuys() + 1).collect(Collections.toList());
当然,它不起作用,但我无法找出(或找到)任何方法。我想要做的只是修改每一个&#34;购买&#34;列表中每个对象的值。在示例中,我添加了一个,但它可以是任何操作。
答案 0 :(得分:1)
我只想使用for
循环。
for (Client client : clientList)
client.setBuys(client.getBuys() + 1);
答案 1 :(得分:1)
阅读评论后,您想要的是通过应用自定义函数来修改每个客户的购买。请考虑以下方法:
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的构造函数将购买作为输入并将操作结果映射到新客户端,如下所示:
private static List<Client> mapClients(List<Client> clients, DoubleUnaryOperator op) {
return clients.stream()
.map(c -> new Client(op.applyAsDouble(c.getBuys())))
.collect(Collectors.toList());
}
答案 2 :(得分:0)
您是否尝试过使用Java提供的Iterator?
(Y - 1) / (X - 1) = Z
(3.290 - 1) / (3.290 - 1) * 100 = 100.0%
(3.235 - 1) / (3.290 - 1) * 100 = 097.5%
(2.280 - 1) / (3.290 - 1) * 100 = 055.8%
(2.230 - 1) / (3.290 - 1) * 100 = 053.7%
(2.145 - 1) / (3.290 - 1) * 100 = 050.0%
(1.830 - 1) / (3.290 - 1) * 100 = 036.2%
(1.660 - 1) / (3.290 - 1) * 100 = 028.8%
(1.100 - 1) / (3.290 - 1) * 100 = 004.3%
(1.010 - 1) / (3.290 - 1) * 100 = 000.4%
(1.000 - 1) / (3.290 - 1) * 100 = 000.0%
或者将结果添加到地图或其他任何内容。