JAVA PriorityQueue比较器不接受float。

问题描述 投票:0回答:1

我有以下类。

    int x;
    int y;
    float distance;

    public Point(int x, int y, float distance){
        this.x = x;
        this.y = y;
        this.distance = distance;
    }
}

在我的主程序中,我有这样一行:

PriorityQueue<Point> minHeap = new PriorityQueue<Point>( (a,b) -> ((float) a.distance - (float) b.distance) );

我一直收到这个错误。

        PriorityQueue<Point> minHeap = new PriorityQueue<Point>( (a,b) -> ((float) a.distance - (float) b.distance) );
                                                                                              ^
    possible lossy conversion from float to int```
------------------------------------------------------------------------------------

I dont know why is not accepting my comparator method. Any ideas? thanks in advance.
java comparator
1个回答
4
投票

这是因为 compare 方法返回一个 int但是,既然你得到了一个 int 之间的操作 float编译器告诉你一些数据可能会丢失(实际上会丢失,所有的小数都会丢失,但你并不关心,因为它只是一个比较器)。

你可以使用 Float.compare(f1, f2)

PriorityQueue<Point> minHeap = new PriorityQueue<Point>( (a,b) -> Float.compare(a.distance, b.distance));
© www.soinside.com 2019 - 2024. All rights reserved.