boolean removed = routeList.removeIf(node -> node.get(0).getName().contains(keyWord)); if (removed) { BaiduNaviInitHelper.setCanSpeak(false); BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes(); List<BNRoutePlanNode> list = new ArrayList<>(); for (List<BNRoutePlanNode> planNodeList : routeList) { //planNodeList获取0是因为list中只有一条数据 list.add(planNodeList.get(0)); } BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list); BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4); showFullView(); isWayPoint = true; } else { speakWithoutFollowStep("抱歉,当前没有" + keyWord + "途经点"); } 有2个途经点,我删除某个后, 删除途径点和添加途经点没有同时执行,在地图上怎么还是显示2个途经点,是怎么回事?
时间: 2024-02-15 15:27:40 浏览: 21
根据代码来看,当成功删除一个途经点后,会执行删除途径点和添加途经点的代码。但是在添加途经点的代码中,使用了一个固定的参数 4,而不是当前途经点的数量,这可能是导致问题的原因之一。建议你在添加途经点的代码中使用当前途经点的数量,也就是 `list.size()`。
另外,你可以检查一下 `routeList` 中的途经点是否确实被成功删除了,如果没有被成功删除,那么后续的删除途径点和添加途经点的代码就不会执行。
相关问题
boolean removed = routeList.removeIf(node -> node.get(0).getName().contains(keyWord)); if (removed) { BaiduNaviInitHelper.setCanSpeak(false); BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes(); List<BNRoutePlanNode> list = new ArrayList<>(); for (List<BNRoutePlanNode> planNodeList : routeList) { //planNodeList获取0是因为list中只有一条数据 list.add(planNodeList.get(0)); } android.util.Log.d("TAGAA", "deleteWayPoint: sdhwaio 核对哇哈 " + list); BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list); BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4); showFullView(); isWayPoint = false; } else { speakWithoutFollowStep("抱歉,当前没有" + keyWord + "途经点"); } 这个删除和添加是同时执行的吗?先删除再添加,帮我改一下代码
可以使用以下代码实现先删除再添加的功能:
```
boolean removed = routeList.removeIf(node -> node.get(0).getName().contains(keyWord));
if (removed) {
List<BNRoutePlanNode> list = new ArrayList<>();
for (List<BNRoutePlanNode> planNodeList : routeList) {
list.add(planNodeList.get(0));
}
BaiduNaviManagerFactory.getRouteGuideManager().setViaNodes(list);
BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(4);
BaiduNaviInitHelper.setCanSpeak(false);
BaiduNaviManagerFactory.getRouteGuideManager().deleteViaNodes();
BaiduNaviManagerFactory.getRouteGuideManager().addViaNodes(list);
showFullView();
isWayPoint = false;
} else {
speakWithoutFollowStep("抱歉,当前没有" + keyWord + "途经点");
}
```
在这段代码中,首先执行了删除操作,然后将剩余的途经点用一个列表保存起来。接着,使用 `setViaNodes()` 方法将剩余的途经点重新添加到导航 SDK 中,同时设置途经点的数量为 4。最后,关闭语音播报、删除所有途经点、重新添加途经点、显示全览图,并设置 `isWayPoint` 为 false。
protected List<List<BNRoutePlanNode>> routeList = new ArrayList<>(); if (keyWord != null) { routeList.removeIf(node -> node.get(0).getName().equals(keyWord)); }帮我写一下如果这个集合中有包含keyWord的数据就删除,如果没有就提示
可以使用Java 8的Stream API和Lambda表达式来实现这个功能。代码如下:
```
if (keyWord != null) {
// 使用Stream API过滤并删除包含关键字的数据
boolean removed = routeList.removeIf(node -> node.stream().anyMatch(n -> n.getName().contains(keyWord)));
// 如果没有数据被删除,则提示
if (!removed) {
System.out.println("The list does not contain any data with the keyword.");
}
}
```
解释一下上面的代码:
- `removeIf()` 方法使用传递的 Lambda 表达式对集合中的每个元素进行过滤,并删除符合条件的元素。在这里,我们使用 `node.stream().anyMatch(n -> n.getName().contains(keyWord))` 来判断是否包含关键字。`node.stream()` 将 `List<BNRoutePlanNode>` 转换为 Stream,`anyMatch()` 方法判断其中是否有任意一个元素的 `name` 包含关键字。
- `removeIf()` 方法返回一个布尔值,表示是否有元素被删除。如果没有数据被删除,则说明集合中没有包含关键字的数据,需要提示用户。
相关推荐
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)