我正在使用Spring框架,在下面的代码中,我希望从数据库中获取纬度和经度并将其存储在ArrayList
中,然后计算它们之间的距离。
问题是我无法弄清楚如何在变量中获取两列的值,当我按照以下方式执行此操作[Ljava.lang.Object; cannot be cast to java.lang.Double
异常抛出
任何人都可以帮助我吗?我知道我们可以使用2D ArrayList
,但如何在以下代码中使用ArrayList
RiderService.java
@Component
public class RiderService {
@Autowired RiderLocationRepository riderLocationRepository;
public float Location(Double lattitude,Double longitude)
{
Double lat2=24.927437;
Double lng2=67.094412;
ArrayList<Double> allRidersLocation = new ArrayList<Double>();
allRidersLocation= riderLocationRepository.findAllRidersLocation();
Iterator<Double> iterator = allRidersLocation.iterator();
while (iterator.hasNext()) {
System.out.println(" DB value " + iterator.next().doubleValue());
}
float distance=distFrom(lattitude, longitude, lat2, lng2);
System.out.println("Distance : " + (distance/1000));
return distance;
}
RiderRepository
public interface RiderLocationRepository extends JpaRepository<RiderLocation, Long>{
@Query("select r.latitude,r.longitude from RiderLocation r ")
ArrayList<Double> findAllRidersLocation();
}
答案 0 :(得分:1)
您的查询返回一个Object数组,如下所示:
@Query("select r.latitude, r.longitude from RiderLocation r")
ArrayList<Object[]> array = //execute_your_query();
要获得结果,您可以使用此功能:
for(Object[] obj : array){//<<---------------list of object with two columns
double d1 = (Double) obj[0];//<<-------col 1
double d2 = (Double) obj[1];//<<-------col 2
}
答案 1 :(得分:1)
使用JpaRepository默认提供给你的findAll方法,你需要这样的东西:
public float Location(Double lattitude,Double longitude)
{
Double lat2=24.927437;
Double lng2=67.094412;
List<RiderLocation> allRidersLocation = riderLocationRepository.findAll();
for (RiderLocation riderLocation : allRidersLocation) {
// use the riderLocation as required, it's not clear to me what methods this has!!
System.out.println("Distance : " + (distance/1000));
return distance;
}
答案 2 :(得分:1)
试试这个,
public float Location(Double lattitude,Double longitude)
{
Double lat2=24.927437;
Double lng2=67.094412;
List<RiderLocation> allRidersLocation = riderLocationRepository.findAll();
for (RiderLocation riderLocation : allRidersLocation) {
float distance=distFrom(riderLocation.getLattitude(), riderLocation.getLongitude(), lat2, lng2);
System.out.println("Distance : " + (distance/1000));
return distance;
}
}
默认情况下,findAll()
方法可用于CrudRepository
public interface RiderLocationRepository extends JpaRepository<RiderLocation, Long>{
}