为何列表中嵌套列表对象?存储手机图片LatLng时输出双括号异常
解决LatLng列表输出带方括号及包含子列表的问题
你遇到的两个问题——输出内容两端多了方括号、列表里嵌套了列表对象,我来帮你一步步拆解原因和解决办法:
一、为什么输出会有两端方括号?
你用的Arrays.toString()方法本身的特性就是这样:它会把整个数组用[]包裹,元素之间用逗号分隔。比如你传入一个包含两个LatLng的数组,转出来的字符串就是[LatLng1, LatLng2],这就是你看到两端方括号的直接原因。
二、为什么列表里会包含列表对象?
这大概率是你的getLatLong(imagePaths)方法返回的不是List<LatLng>,而是List<List<LatLng>>(也就是“列表的列表”)。可能是你在处理每张图片的经纬度时,把单张图片的LatLng放进了一个小列表,然后直接把这个小列表加到了realLatLngs里,而不是把小列表里的单个LatLng元素添加进去。
三、具体修复步骤
1. 修正getLatLong方法的返回结构
假设你原来的方法是这样写的:
public List<List<LatLng>> getLatLong(List<String> imagePaths) { List<List<LatLng>> result = new ArrayList<>(); for (String path : imagePaths) { List<LatLng> singlePicLatLng = new ArrayList<>(); // 获取单张图片的LatLng并加入小列表 singlePicLatLng.add(获取到的LatLng); result.add(singlePicLatLng); // 错误:直接添加了小列表 } return result; }
改成直接收集单个LatLng元素:
public List<LatLng> getLatLong(List<String> imagePaths) { List<LatLng> result = new ArrayList<>(); for (String path : imagePaths) { LatLng singleLatLng = 获取到的单张图片的LatLng; if (singleLatLng != null) { result.add(singleLatLng); // 正确:添加单个LatLng对象 } } return result; }
2. 去掉输出的多余方括号
如果已经得到了纯List<LatLng>,可以不用Arrays.toString(),改用更灵活的字符串拼接方式:
// 方法1:用String.join自定义格式 List<String> latLngTextList = new ArrayList<>(); for (LatLng latLng : realLatLngs) { latLngTextList.add(latLng.latitude + ", " + latLng.longitude); } LatLngs.setText(String.join("; ", latLngTextList));
如果还是想用Arrays.toString(),可以通过字符串截取去掉首尾的方括号:
String rawStr = Arrays.toString(realLatLngs.toArray()); // 截取掉第一个字符[和最后一个字符] String cleanStr = rawStr.substring(1, rawStr.length() - 1); LatLngs.setText(cleanStr);
四、验证效果
修改完成后再运行代码,应该就能看到没有多余方括号的输出,而且列表里也都是单个的LatLng对象,不会再出现嵌套列表的情况了。
内容的提问来源于stack exchange,提问作者Joe O'Brien
相关产品推荐
相关产品推荐

