繁体   English   中英

数组到列表的转换和类型转换

[英]Array to List converting and type casting

动机:

我正在创建一个执行以下操作的android应用程序。

  1. 读取输入点(Point类型-自定义类)。
  2. 计算最外面的点。
  3. 绘制一个多边形(需要从osmdroid库输入GeoPoint类型的输入),并将这些点作为顶点(凸多边形)。

问题:

我使算法起作用。 但是转换数据类型存在问题。

输入是一个Point数组(Point是一个自定义类)。

geoPoints = new Point[7];
geoPoints[0] = new Point(new GeoPoint(8.180992, 77.336551));

但是绘制多边形的osmdroid函数需要使用List <GeoPoint>作为输入。

List<GeoPoint> gPoints;
polygon.setPoints(gPoints);

我设法在Point()构造函数上进行了转换,如下所示

public Point(GeoPoint geoPoint) {
        this.x = geoPoint.getLatitude();
        this.y = geoPoint.getLongitude();
    }

但是我不知道如何计算返回类型。

所以,当我运行代码。 我收到以下错误。

error: incompatible types: inference variable T has incompatible bounds
equality constraints: GeoPoint
lower bounds: Point
where T is a type-variable:
T extends Object declared in method <T>asList(T...)

调用函数:

private void callingFunction() {

        geoPoints = new Point[7];
        geoPoints[0] = new Point(new GeoPoint(8.180992, 77.336551));
        geoPoints[1] = new Point(new GeoPoint(8.183966, 77.340353));
        geoPoints[2] = new Point(new GeoPoint(8.179836, 77.336105));
        geoPoints[3] = new Point(new GeoPoint(8.178744, 77.339179));
        geoPoints[4] = new Point(new GeoPoint(8.182155, 77.341925));
        geoPoints[5] = new Point(new GeoPoint(8.181655, 77.339318));
        geoPoints[6] = new Point(new GeoPoint(8.182155, 77.341925));

        polygon = new Polygon();    //see note below
        polygon.setFillColor(Color.parseColor("#80FFE082"));
        polygon.setStrokeColor(Color.parseColor("#FFD54F"));
        polygon.setStrokeWidth(5f);

        ConvexHull cx = new ConvexHull(geoPoints);
        Point C1[]= cx.getConvexHull();

        polygon.setPoints(Arrays.asList(C1));

        map.getOverlayManager().add(polygon);
        map.invalidate();

    }

注意:

不能仅使用列表或仅使用数组,因为

polygon.setPoints(geoPoints)    //needs List<GeoPoint> in callingFunction
Arrays.sort(points);            //requires array of Points in ConvexHull

提供的一切。 我怎么解决这个问题? 任何形式的帮助将非常有用。 并预先感谢。

我不确定,如果我做对了,但基本上您的问题可以归结为以下事实:您拥有一个Point对象数组,但是需要一个GeoPoint对象列表,对吗? 而且PointGeoPoint之间没有关系,因此一个不会扩展另一个。

那么为什么不在绘制多边形之前将Point对象转换回GeoPoint对象呢?

您可以在流中映射类型:

ConvexHull cx = new ConvexHull(geoPoints);
Point C1[] = cx.getConvexHull();

polygon.setPoints(Arrays.stream(C1).map(p -> new GeoPoint(p.getX(), p.getY())).collect(Collectors.toList());

或使用for循环:

ConvexHull cx = new ConvexHull(geoPoints);
Point C1[] = cx.getConvexHull();

List<GeoPoint> points = new ArrayList<GeoPoint>(C1.length);
for (int i = 0; i < C1.length; ++i) {
  points.add(new GeoPoint(C1[i].getX(), C1[i].getY()));
}
polygon.setPoints(points);

铸造类型 Object 入列表<object><div id="text_translate"><p>远程调用 API 控制器(通过 RestTemplate)(即从一侧返回已知 object 的列表 ([]) 和未知类型的 ZA8CFDE6331BD59EB2AC96F8911BD59EB2AC96F8911C4B666Z&gt; 从远程端返回ResponseEntity&lt;Object&gt;通过restTemplate.getForEntity(url, Object.class)</p><p> 为了迭代/循环返回的 object 是否可以将返回的 object 转换为 List (假设它是一个 List )? 并使用 Java 的反射从每个 object 中获取想要的字段值? 否则如何访问 Object 类型来获取字段值?</p><p> 编辑:具有这种结构的 object(在 java 中是 Object 类型)</p><pre> {id=5, name=Jasmin, description=Room Jasmin, idType=0, addedAt=2020-06-16T17:20:00.617+0000, modifiedAt=null, deleted=true, images=[string], idBuilding=2, idFloor=4, idZone=3}</pre><p> 如何访问 id 字段值? 我试过Class&lt;?&gt; RoomClass = roomTuple.getClass(); 然后用getField()</p><p> 谢谢,</p></div></object>

[英]Casting type Object into List<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM