【问题标题】:How to convert java list of objects to 2D array?如何将java对象列表转换为二维数组?
【发布时间】:2016-02-01 13:25:34
【问题描述】:

有没有简单的方法在java 8中使用lambda进行转换

来自这个对象:

        "coords" : [ {
    "x" : -73.72573187081096,
            "y" : 40.71033050649526
}, {
    "x" : -73.724263,
            "y" : 40.709908}
]

到这个对象:

    "coordinates":[
    [
    [
   -73.72573187081096,
            40.71033050649526
    ],
    [
    -73.724263,
            40.709908
    ]]

我尝试使用transform() 函数,但如何从列表转换为二维数组?

这是我的尝试, 但我得到了一个错误:

coordinates =

        Lists.newArrayList(
                Lists.newArrayList(
                        Lists.newArrayList(
                                coords.stream()
                                        .map( item -> Lists.newArrayList(ImmutableList.of(item.x, item.y))))));

【问题讨论】:

    标签: java lambda


    【解决方案1】:

    不是 100% 确定你在问什么,但我会试一试。假设您有一个点列表...

    List<Point2D> points = Arrays.asList(new Point2D.Double(12., 34.),
                                         new Point2D.Double(56., 78.));
    

    ...您可以像这样将该列表转换为二维数组:

    double[][] array = points.stream()
            .map(p -> new double[] {p.getX(), p.getY()})
            .toArray(double[][]::new);
    

    ...或像这样进入嵌套列表:

    List<List<Double>> list = points.stream()
            .map(p -> Arrays.asList(p.getX(), p.getY()))
            .collect(Collectors.toList());
    

    在这两种情况下,结果都类似于 [[12.0, 34.0], [56.0, 78.0]],分别作为数组或列表。

    【讨论】:

      【解决方案2】:

      还有另一种将列表转换为二维数组的选项:

      double[][] array;
      
          array = points
                  .stream()
                  .map(l -> l.stream()
                          .mapToDouble(Double::doubleValue)
                          .toArray())
                  .toArray(double[][]::new);
      

      【讨论】:

        猜你喜欢
        • 2017-01-01
        • 1970-01-01
        • 2011-12-04
        • 1970-01-01
        • 1970-01-01
        • 2020-11-10
        • 2015-10-22
        • 1970-01-01
        • 2016-10-14
        相关资源
        最近更新 更多