将B集合合并到A集合
List<String> listA = new ArrayList<String>();
List<String> listB = new ArrayList<String>(); listA.add("A");
listA.add("A001");
listA.add("A001001"); listB.add("A001");
listB.add("A001001");
listB.add("A001001001"); 如果B集合中有元素同A集合中某元素相同 再在后面加001,然后再在A,B集合查看是否相同,相同加001 ,直到不相同。
List<String> listA = new ArrayList<String>();
List<String> listB = new ArrayList<String>(); listA.add("A");
listA.add("A001");
listA.add("A001001"); listB.add("A001");
listB.add("A001001");
listB.add("A001001001"); 如果B集合中有元素同A集合中某元素相同 再在后面加001,然后再在A,B集合查看是否相同,相同加001 ,直到不相同。
如果允许的话那么就:public static void main(String[] args) {
List<String> listA = new ArrayList<String>();
List<String> listB = new ArrayList<String>(); listA.add("A");
listA.add("A001");
listA.add("A001001"); listB.add("A001");
listB.add("A001001");
listB.add("A001001001");
test(listA, listB);
for(String b:listB){
System.out.println(b);
}
} public static void test(List<String> listA,List<String> listB){
for(String b:listB){
if(listA.contains(b)){
listB.remove(b);
b+="001";
listB.add(b);
test(listA, listB);break;
}
}
}
不允许的话引用一下我再改改结束条件应该就行了
楼主补充listB不能重复的条件,只要在22和23之间加个判断b是否存在listB,是+001,否继续。
这样应该就可以了。
这方法处理一下listB就行了。public static void test2(List<String> listB){
for(int i=0;i<listB.size();i++){
String b=listB.get(i);
listB.remove(i);
if(listB.contains(b)){
b+="001";
listB.add(b);
test2(listB);break;
}else{
listB.add(b);
}
}
}
public static void main(String[] args)
{
List<String> listA = new ArrayList<String>();
List<String> listB = new ArrayList<String>(); listA.add("A");
listA.add("A001");
listA.add("A001001"); listB.add("A001");
listB.add("A001001");
listB.add("A001001001"); //最终保证listB中的字符串全部在listA中不存在
while (isContain(listA, listB))
{
for (String str : listB)
{
//存在相同,则+001处理
if (listA.contains(str))
{
//处理之前要保证+001在B中不重复
process(str, listB);
}
}
}
listA.addAll(listB);
System.out.println(listA);
} private static void process(String str, List<String> listB)
{
//获取下标
int index = listB.indexOf(str); //下标小于0,则退出
if (index < 0)
{
return;
} //拼装后的新字符串
String newStr = str + "001"; //如果依然存在,需要递归调用
if (listB.contains(newStr))
{
process(newStr, listB);
}
else
{
//不重复,则加入到list中
listB.set(index, newStr);
}
} //判断是否在listA中存在
private static boolean isContain(List<String> listA, List<String> listB)
{
for (String str : listB)
{
if (listA.contains(str))
{
return true;
}
}
return false;
}
List<String> listA = new ArrayList<String>();
List<String> listB = new ArrayList<String>(); listA.add("A");
listA.add("A001");
listA.add("A001001"); listB.add("A001");
listB.add("A001001");
listB.add("A001001001");
addList(listA,listB);
System.out.println(listA);
} private static void addList(List<String> listA, List<String> listB) {
for (int i = 0; i < listB.size(); i++) {
String str = listB.get(i);
String newStr = testSame(str,listA,listB);
listA.add(newStr);
}
} private static String testSame(String str, List<String> listA,
List<String> listB) {
while(listA.contains(str) || listB.contains(str)){
str = str+"001";
}
return str;
}