简体   繁体   中英

How to convert java list of objects to 2D array?

Is there an easy way to use lambda in java 8 to convert

from this object:

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

to this object:

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

I try to use transform() function but how can i transform from list to 2D array ?

here is my try, but i got an error:

coordinates =

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

Not 100% sure what you are asking, but I'll give it a try. Assuming you have a list of Points...

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

... you can turn that list into a 2D-array like this:

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

... or into a nested list like this:

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

In both cases, the result looks like this [[12.0, 34.0], [56.0, 78.0]] , as an array or a list, respectively.

Also there is another option for convert list to 2D array:

double[][] array;

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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