gpt4 book ai didi

Java静态方法ArrayList

转载 作者:行者123 更新时间:2023-12-01 19:56:48 24 4
gpt4 key购买 nike

我有两个名为“水果”和“球”的类(class)。对于它们中的每一个,属性之一是价格。我需要创建一个静态方法,仅从混合数组返回价格最小的元素。我有对象 f1、f2、f3、b1、b2、b3。

我制作了一个像这样的 ArrayList 列表:

{ Fruit f1 = new Fruit("Apple", "Red", "Summer", 9.5);
...
Ball b1 = new Ball("Red", "Stripes", 10.5);
...
ArrayList list = new ArrayList();
list.add(f1);
list.add(b1);
...
}

现在关于我必须采取的方法,我是这样开始的:

static void method(ArrayList list) {
for (int i = 0; i < lista.size(); i++) {
}

我陷入了从数组中获取元素和用于查找每个元素价格的 getter 的混合困境。你能帮助我吗?

即使您不明白我想要做什么,您也可以帮助我一些混合不同元素的数组的技巧吗?谢谢!

最佳答案

所以您遇到的问题是您没有输入列表,而是创建 new ArrayList()不指定类型在功能上与创建 new ArrayList<Object>() 相同。然后,当您从此列表中调用项目时,您将获得 Object返回,其中没有 price属性

通过流的实现,您可以找到解决此问题的相当简单的解决方案:

double minFruitPrice = Stream.of(f1, f2, f3)
.reduce((acc, val) -> acc.price < val.price ? acc : val)
.orElseThrow(() -> new RuntimeException("No fruits provided!")) // reduce with 1 argument returns an optional
.getPrice(); // Always use a getter

在这种情况下,“正确”的实现是创建一个具有价格属性的对象:

abstract class PricedObject {
private double price;

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}
}

然后创建您的 FruitBall将扩展该类的对象(采用其属性)

class Fruit extends PricedObject {
private String type;
private String colour;
private String season;

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getColour() {
return colour;
}

public void setColour(String colour) {
this.colour = colour;
}

public String getSeason() {
return season;
}

public void setSeason(String season) {
this.season = season;
}
}

还有

class Ball extends PricedObject {
private String colour;
private String pattern;

public String getColour() {
return colour;
}

public void setColour(String colour) {
this.colour = colour;
}

public String getPattern() {
return pattern;
}

public void setPattern(String pattern) {
this.pattern = pattern;
}
}

然后在上面给出的流实现中使用这些对象:

Stream.of(f1, f2, f3, b1, b2, b3)
.reduce((acc, val) -> acc.getPrice() < val.getPrice() ? acc : val);

这将返回 Optional PricedItem的以最低的价格。然后您可以调用.get()从可选值中获取值,尽管使用 orElse 之一更安全选项。

关于Java静态方法ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49382051/

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