Java中如何在循環中的把已經匹配好不在參與下次循環中,而且數據不能丟失了

 在開發中,遇到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的數據的順序發生了變化,想到解決辦法了再修改文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章