在開發中,遇到foreach的,for循環中的一個小坑
需求:從poi列表中查出數據,從收藏表中查出數據,諾是收藏過,則給收藏的數據poi中collection=1,表示收藏了,collection=2表示未收藏。poi查出的數據需要返到前端頁面不能丟失。
List<Poi> poiList = poiService.getPOIList(poi);
// 判斷是否收藏
Bookmarks bookmarks = new Bookmarks();
bookmarks.setUserId(userId);
bookmarks.setStatus(1);
bookmarks.setType(1);
List<Bookmarks> bookMarksList = bookMarksService
.getBookMarksList(bookmarks);
ArrayList<Poi> arrayList = new ArrayList<Poi>();
for (Bookmarks bookmark : bookMarksList) {
for (int i = 0; i < poiList.size(); i++) {
if (bookmark.getFocusId().equals(poiList.get(i).getId()) ) {
poiList.get(i).setCollection(1);//收藏
arrayList.add(poiList.get(i));
poiList.remove(poiList.get(i));
}else {
poiList.get(i).setCollection(2);
}
}
}
poiList.addAll(arrayList);
generalDto.setItems(poiList);
解決辦法,使用for循環 foreach不能做刪除操作,先創建一個Arraylist集合,然後把匹配到的數據放到新建的list集合中,然後給collection賦值=1,從原來的集合poilist中刪除,最後循環結束以後,把ArrayList 添加到需要返回的poilist中就可以了
注意:foreach中只能讀操作不能寫操作,for中可以進行添加刪除操作。在返回poiList的數據的順序發生了變化,想到解決辦法了再修改文章