public ArrayList<Items> getViews(String list,int j){//多传入了一个int j是为了保证最多显示规定的商品记录个数 String[] arr = list.split(","); ArrayList<Items> itemList = new ArrayList<Items>(); //遍历数组添加到集合中去 for (int i = arr.length-1; i > 0-1; i--) { //如果集合中已经存在相同商品了就先删除前面的 for(int k = 0;k < itemList.size();k++){ if (itemList.get(k).equals(this.getView(Integer.parseInt(arr[i])))) { itemList.remove(k);//删除之前有的相同商品 j++; //因为删除了一件商品,所以需要j++ } } itemList.add(this.getView(Integer.parseInt(arr[i])));//添加对应的id商品到集合中去 j--; //成功添加一个商品,j-- //用j<0其实添加了j+1个商品去集合 if (j<0) { break; } } return itemList; }
总结:
1、通过传入参数j,添加商品到集合就减一,删除商品到集合就加一,如果j<0就直接break跳出循环,不再添加商品进集合;
2、用两个for循环,判断前面集合里面是否已经有相同商品了,反正只要没到j<0,外部循环每次肯定是要添加商品的,内部循环并判断是否之前已经有相同商品了,有的话直接删除之前已经有的;
3、本来集合循环比较是否有相同商品可以用foreach语句更简单,但是就是不行,我也不知道原因,只能用这种原始的for循环语句;
4、添加商品时,getView()方法是之前创建的获取具有指定id值商品的方法;
5、互相交流学习,有更好的方法欢迎大神指正。
J的初值是多少啊
public ArrayList<Items> getViews(String list,int j){//多传入了一个int j是为了保证最多显示规定的商品记录个数 String[] arr = list.split(","); ArrayList<Items> itemList = new ArrayList<Items>(); //遍历数组添加到集合中去 for (int i = arr.length-1; i > 0-1; i--) { //如果集合中已经存在相同商品了就先删除前面的 for(int k = 0;k < itemList.size();k++){ if (itemList.get(k).equals(this.getView(Integer.parseInt(arr[i])))) { itemList.remove(k);//删除之前有的相同商品 j++; //因为删除了一件商品,所以需要j++ } } itemList.add(this.getView(Integer.parseInt(arr[i])));//添加对应的id商品到集合中去 j--; //成功添加一个商品,j-- //用j<0其实添加了j+1个商品去集合 if (j<0) { break; } } return itemList; }