For 循环迭代器类型与我尝试访问的类型不同
For loop iterator type not the same as type I am trying to access
我正在尝试遍历 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;
}
显示的错误是beacon不是正确的类型,它应该是一个整数,但是Beacons不是整数。有谁知道添加另一个迭代器或暂时将信标设置为整数的方法?
distance = Utils.commputeAccuracy(beacon) will return an double.
顺便说一句,信标只是我制作的一些对象,但它们由 UUID、主要和次要数字组成。这可能无关紧要,但以防万一您想知道。谢谢!
您在 ArrayList 上调用 set。第一个参数应该是 int,而不是 Beacon 类型。
在this.myBeaconDistances.set(beacon, distance);
见
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,%20E)
您需要使用 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;
}
执行此操作时,还必须根据 "equality" 的含义在 Beacon
中实现 equals()
和 hashCode()
,并且它们必须彼此一致。阅读 Map
接口的 Javadoc。
在您的情况下,"equals" 可能必须考虑 UUID 和 major/minor 版本号。下面假定 major/minor 是原始类型,并且 UUID 不能为 null。添加额外的检查或根据需要用 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();
}
我正在尝试遍历 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;
}
显示的错误是beacon不是正确的类型,它应该是一个整数,但是Beacons不是整数。有谁知道添加另一个迭代器或暂时将信标设置为整数的方法?
distance = Utils.commputeAccuracy(beacon) will return an double.
顺便说一句,信标只是我制作的一些对象,但它们由 UUID、主要和次要数字组成。这可能无关紧要,但以防万一您想知道。谢谢!
您在 ArrayList 上调用 set。第一个参数应该是 int,而不是 Beacon 类型。
在this.myBeaconDistances.set(beacon, distance);
见 https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,%20E)
您需要使用 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;
}
执行此操作时,还必须根据 "equality" 的含义在 Beacon
中实现 equals()
和 hashCode()
,并且它们必须彼此一致。阅读 Map
接口的 Javadoc。
在您的情况下,"equals" 可能必须考虑 UUID 和 major/minor 版本号。下面假定 major/minor 是原始类型,并且 UUID 不能为 null。添加额外的检查或根据需要用 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();
}