2016-02-01 120 views
-4

有沒有辦法使用拉姆達在Java 8如何將java對象列表轉換爲二維數組?

從這個對象轉換一個簡單的方法:

 "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)))))); 

回答

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]],分別作爲數組或列表。