这是一段字符串[[{“lng”:11111,“lat”:222222},{“lng”:11111,“lat”:222222},{“lng”:11111,“lat”:222222}]],不使用Gson提取出其中的lng与lat并进行分组
时间: 2024-09-23 19:14:36 浏览: 61
aiscli:杂项基于命令行的AIS消息字符串处理
这段字符串是一个包含经纬度坐标信息的数组嵌套在JSON格式的数组中。如果你想要提取其中的`lng`和`lat`值,并按照它们分组,可以先将其解析成Java的对象,例如`LatLng`类,然后再进行分组操作。这里假设有一个简单的`LatLng`类:
```java
public class LatLng {
private double lng;
private double lat;
// 构造函数、getter和setter省略
public LatLng(double lng, double lat) {
this.lng = lng;
this.lat = lat;
}
}
```
然后你可以使用Java 8的Stream API来处理这个字符串:
```java
import com.google.gson.Gson; // 引入Gson库
String jsonString = "[[{"lng":11111,"lat":222222},{"lng":11111,"lat":222222},{"lng":11111,"lat":222222}]]";
Gson gson = new Gson();
LatLng[] points = gson.fromJson(jsonString, LatLng[].class);
// 使用GroupingBy进行分组,键是经纬度的组合,值是包含该组合的所有LatLng实例
Map<tuple<Double, Double>, List<LatLng>> groupedPoints = points.stream()
.collect(Collectors.groupingBy(LatLng::new, Collectors.toList()));
// 假设(tuple)是Java 9引入的一种元组数据结构
import java.util.function.Tuple;
// 或者使用自定义的Pair类代替
public class Pair<X, Y> {
private X x;
private Y y;
// 省略构造方法...
public Pair(X x, Y y) { ... }
}
// 如果不支持Java 9,我们可以创建一个Pair类来存储经纬度
List<Pair<Double, Double>> groups = groupedPoints.entrySet().stream()
.map(entry -> new Pair<>(entry.getKey().getL(), entry.getKey().getR(), entry.getValue()))
.collect(Collectors.toList());
```
现在`groups`列表包含了所有分组后的经纬度对以及对应的点列表。
阅读全文