gpt4 book ai didi

java - For 循环迭代器类型与我尝试访问的类型不同

转载 作者:行者123 更新时间:2023-12-02 03:30:49 24 4
gpt4 key购买 nike

我试图迭代 for 循环并根据其所在的迭代设置列表的元素,但迭代类型与我要访问的列表的类型不同

private List<Double> myBeaconDistances = new ArrayList<>();

private List getBeaconDistances(List<Beacon> beacons){
for (Beacon beacon : beacons) {
double distance = Utils.computeAccuracy(beacon);
this.myBeaconDistances.set(beacon, distance);

}

return myBeaconDistances;
}

显示的错误是信标类型不正确,它应该是整数,但信标不是整数。有谁知道如何临时添加另一个迭代器或将信标设置为整数?

distance = Utils.commputeAccuracy(beacon) will return an double.

顺便说一句,信标只是我制作的一些对象,但它们由 UUID、主要号码和次要号码组成。这可能无关紧要,但以防万一您想知道。谢谢你!

最佳答案

您需要使用Map而不是List:

private Map<Beacon,Double> myBeaconDistances = new HashMap<>();

private Map<Beacon,Double> getBeaconDistances(List<Beacon> beacons){
for (Beacon beacon : beacons) {
double distance = Utils.computeAccuracy(beacon);
this.myBeaconDistances.put(beacon, distance);

}

return myBeaconDistances;
}

执行此操作时,您还必须根据“相等”的含义在 Beacon 中实现 equals()hashCode(),并且它们必须彼此一致。阅读 Map 接口(interface)的 Javadoc。

在您的情况下,“等于”可能必须考虑 UUID 和主要/次要版本号。以下假设主要/次要是原始类型,并且 UUID 不能为空。添加额外的检查或根据需要替换 equals()==:

@Override
public boolean equals(Object other)
{
if (this == other) return true;
if (other == null || !this.isAssignableFrom(other)) return false;
Beacon b = (Beacon) other;
return this.uuid.equals(b.uuid) && this.major == b.major && this.minor == b.minor;
}

@Override
public int hashCode()
{
return 2047*this.major + this.minor + this.uuid.hashCode();
}

关于java - For 循环迭代器类型与我尝试访问的类型不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127459/

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