java 合并两个 list内容 剔除相同内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 合并两个 list内容 剔除相同内容相关的知识,希望对你有一定的参考价值。

例: List<String> list1;
list1.add("a")
list1.add("b")

list1.add("c")

List<String> list2;
list1.add("a")
list1.add("b")
list1.add("d")
需要返回的List<String> resultList;中只存在String "d";
这个该怎么写!

遍历这两个list ,使用 双层循环,在内循环判断,若外循环的list的value存在在内循环中,则同时删除两个list中的那个value,不存在的话,使用第三个list来动态添加,最后返回第三个list就是你所需要的resultList。追问

能帖个测试通过的代码出来吗!

追答

import java.util.ArrayList;import java.util.List;
public class Test
public static List list_one()
List list1=new ArrayList();
list1.add("a");
list1.add("b");
list1.add("c");
return list1;


public static List list_two()
List list2=new ArrayList();
list2.add("a");
list2.add("b");
list2.add("d");
return list2;


public static List resultList(List list1,List list2)
List same=new ArrayList();
List result=new ArrayList();
for (int i = 0; i s=resultList(list_one(),list_two());
for (int i = 0; i < s.size(); i++)
System.out.println(s.get(i));



//还有中方法就使用set集合。先添加一个list,用contains方法,弄完之后,再转为list集合。也比较的复杂。

加QQ好友吧!结贴吧。。。。问题帮你解决了

参考技术A 你可以再建一个新newlist,把list1和list2的值往newlist里面循环放,放的时候判断一下,有这个值了就不放了。 参考技术B list2.removeAll(list1);追问

最好自己测试一下! 这种办法我已经测试过了! 不行的!

参考技术C public static void main(String[] args)

List<String> list1 = new ArrayList<String>();
list1.add("a");
list1.add("b");

list1.add("c");

List<String> list2 = new ArrayList<String>();
list1.add("a");
list1.add("b");
list1.add("d");
Set<String> set = new HashSet<String>();
for(String s: list1)
set.add(s);

for(String s : list2)
if(set.contains(s))
set.remove(s);
else
set.add(s);


String[] arr = new String[set.size()];
set.toArray(arr);
List<String> resultList = Arrays.asList(arr);
参考技术D 你说的是返回c和d吧?不是剔除相同的吗?还有你的那个a b,d咋也添加到list1中?你说的是添加到list2中吧?

java中如何把2个LIST相同的内容相加?

例如有list1里面有个字段叫A,B,C,A=1,B=1,C=1;list2里面有个字段也叫A,D,E,A=2,D=2,E=2!我想在合并之后等到合并之后的resultList,resultList里面的内容是:A,B,C,D,E A=3,B=1,C=1,D=2,E=2!麻烦各位大侠了!
大侠们,最好给个例子,我参考参考!

package test;

import java.util.*;

public class Test 
    public void test() 
        List list1 = new ArrayList();
        list1.add(new Field("A", 1));
        list1.add(new Field("B", 1));
        list1.add(new Field("C", 1));
        List list2 = new ArrayList();
        list2.add(new Field("A", 2));
        list2.add(new Field("D", 2));
        list2.add(new Field("E", 2));
        List res = Join(list1, list2);
        for (Field field : res) 
            System.out.print(field.getName() + ":" + field.getValue() + " ,");
        
    

    public static void main(String[] args) 
        new Test().test();
    

    public static List Join(List list1, List list2) 
        List res = new ArrayList();
        List list2_copy = new ArrayList(list2);
        for (Field field1 : list1) 
            boolean hasSameOne = false;
            for (Field field2 : list2) 
                if (field1.getName().equals(field2.getName())) 
                    res.add(field1.add(field2));
                    list2_copy.remove(field2);
                    hasSameOne = true;
                
            
            if (!hasSameOne)
                res.add(field1);
        
        res.addAll(list2_copy);
        return res;
    

    public class Field 
        private int value = 0;
        private String name;

        public Field(String name, int value) 
            this.name = name;
            this.value = value;
        

        public int getValue() 
            return value;
        

        public String getName() 
            return name;
        

        public Field add(Field value) 
            return new Field(this.getName(), this.getValue() + value.getValue());
        
    

参考技术A Map<String, Integer> list1 = new HashMap<String, Integer>();
list1.put("A", 1);
list1.put("B", 1);
list1.put("C", 1);
Map<String, Integer> list2 = new HashMap<String, Integer>();
list2.put("A", 2);
list2.put("D", 2);
list2.put("E", 2);
Set<String> set = list2.keySet();
for (String temp : set) 
if (list1.get(temp) != null) 
list1.put(temp, list1.get(temp).intValue() + list2.get(temp).intValue());
 else 
list1.put(temp, list2.get(temp));


System.out.println(list1);

本回答被提问者采纳
参考技术B List<User> users1 = new ArrayList<User>();
List<User> users2 = new ArrayList<User>();
//模拟两个list

//使用增强for 循环迭代

for(User : user ,users1)
    users2.add(user);

参考技术C list的addAll方法用于添加元素到list中,list1和list2相等的话 list.addAll(list2);也是可以的。 参考技术D 根据你的提问,有两个疑点,一,list怎么会有key,二,是没有现成的方法给你调用list相加的,自己先遍历出来再相加,或者根据你的业务逻辑处理下就好了。

以上是关于java 合并两个 list内容 剔除相同内容的主要内容,如果未能解决你的问题,请参考以下文章

java中如何把2个LIST相同的内容相加?

java 将不同文件下的相同多级目录下文件内容,合并到一个新的文件夹中,建立对应多级目录

两个excel表,有一列内容相同,怎么把这两张表合并?

表格怎么把一样的内容合并

合并两个文件中,相同的内容

excel表中同一列相同内容进行合并