先描述一下我遇到的问题,我在做一个消费项目设置的时候,需要在页面上用表格列出所有的消费项目,加上增删改查功能,还有一个快速定位需要在下拉列表框中动态的添加二级消费项目(就是消费项目的其中一个字段)。最开始的想法自然是从数据库中查出来直接添加,因为这个二级消费项目字段前面还有个一级项目字段,所以有的消费项目的二级消费项目为空,也有同时几条记录都属于某个二级消费项目的情况,所以列出来的下拉列表很乱。言归正传,怎么过滤掉其中的重复数据呢?
StringBuilder是不可继承的,没办法修改功能,所以不能再append的过程中做操作,所以我们只能先把重复的数据过滤掉,然后再用StringBuilder的append方法。CSDN上有这样一个举例:
现有StringBuilder对象一个:ItemList
有两个string类型的变量: "1,2,3,4,5,6 " 和 "3,4,5,6,7,8 "
问题:
如何让ItemList对象在Append()这两个string变量之后,得到的结果是:
"1,2,3,4,5,6,7,8 "
viena网友解答:
StringCollection sc = new StringCollection();
string[] arr = "1,2,3,4,5,6 ".Split( ', ');
foreach(string str in arr)
{
if(!sc.Contains(str))
{
sc.Add(str);
}
}
string[] arr2 = "3,4,5,6,7,8 ".Split( ', ');
foreach(string str in arr2)
{
if(!sc.Contains(str))
{
sc.Add(str);
}
}
StringBuilder sb = new StringBuilder();
foreach(string str in sc)
{
sb.Append(str);
}
就是先用一个StringCollection对象过滤掉所有重复的项 ,再将StringCollection对象中的项分别添加到StringBuilder对象,
但我试了一下,在我的serveice的实现类里StringCollection不好用啊,跟上例中的情况貌似也不太符合,我把它改成ArrayList类型就好用多了,
具体代码: @Override
public StringBuilder listsecondCategoryToSelect() {
ArrayList list0=new ArrayList();
List<Category> list = categoryDao.listCategory();
Iterator<Category> iter = list.iterator();
StringBuilder builder = new StringBuilder("");
builder.append("({");
int i = 1;
while (iter.hasNext()) {
Category category = iter.next();
String st=category.getSecondCategory();
list0.add(st);
if (!list0.contains(st) && st.trim() != "" && st.trim()!=null&& !st.trim().equals("") ) {
builder.append("" + i + ":").append("{id:\"")
.append(category.getId()).append("\",secondCategory:\"")
.append(st).append("\"},");
} else {
continue;
}
i++;
}
i--;
builder.append("listInfo:{num:" + i + "}})");
return builder;
}
这样就ok了,动手试一下?其实也可以用set自动去除重复数据,方法很多的