对比两个list的差异,list的每个元素是string

//对比ListOld和ListNew的差异
	public static List<String> getDiff(List<String> ListOld, List<String> ListNew) {
        //程序开始时间
	    long st = System.nanoTime();
		//获取相同的元素放入ListC
		List<String> ListC = new LinkedList();
		Map<String, String> listMap = new HashMap();
		//取得相同的元素
		Iterator<String> iteratorA = ListOld.iterator();
		while (iteratorA.hasNext()) {
			String tempInteger = iteratorA.next();
			listMap.put(tempInteger, tempInteger);
		}
		Iterator<String> iteratorB = ListNew.iterator();
		while (iteratorB.hasNext()) {
			String tempInteger = iteratorB.next();
			if (listMap.containsKey(tempInteger)) {
				ListC.add(tempInteger);
			}
		}
		ListOld.removeAll(ListC);
		ListNew.removeAll(ListC);
        //差异元素
		//ListOld.addAll(ListNew);
        //分辨结束
	    System.out.println("total times "+(System.nanoTime()-st));
		return ListOld;
	}

因为我需要知道,两个list的元素的差异,并不是求得两个list的差异元素和。所以,我在比较后,返回的是listold。当调用的时候,需要调用两次。两次传入的list需要调换位置,这样可以分别获取到旧数据和新数据的不同,新数据和旧数据的不同。如果不需要如此的话,可跟实际情况调整。

List<String> diff = StringUtils.getDiff(ListOld, ListNew);
List<String> diff1 = StringUtils.getDiff(ListNew, ListOld);
System.out.println(diff.toString());
System.out.println(diff1.toString());

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于两个List<User>对象,可以通过比较每个User对象的属性来获取它们的差异集合。具体步骤如下: 1. 先创建两个List<User>对象list1和list2。 2. 创建一个新的List<User>对象difference,用于存储list1和list2的差异集合。 3. 遍历list1中的每个User对象,对于每个User对象,遍历list2中的每个User对象进行比较。如果两个User对象的属性相同,则说明它们是相同的,不需要加入差异集合;如果两个User对象的属性不同,则说明它们是不同的,需要加入差异集合。 4. 遍历list2中的每个User对象,对于每个User对象,遍历list1中的每个User对象进行比较。如果两个User对象的属性相同,则说明它们是相同的,不需要加入差异集合;如果两个User对象的属性不同,则说明它们是不同的,需要加入差异集合。 下面是示例代码: ```java List<User> list1 = new ArrayList<>(); list1.add(new User("Alice", 20)); list1.add(new User("Bob", 25)); list1.add(new User("Charlie", 30)); List<User> list2 = new ArrayList<>(); list2.add(new User("Bob", 25)); list2.add(new User("David", 35)); list2.add(new User("Eva", 40)); List<User> difference = new ArrayList<>(); for (User user1 : list1) { boolean found = false; for (User user2 : list2) { if (user1.equals(user2)) { found = true; break; } } if (!found) { difference.add(user1); } } for (User user2 : list2) { boolean found = false; for (User user1 : list1) { if (user2.equals(user1)) { found = true; break; } } if (!found) { difference.add(user2); } } System.out.println("list1和list2的差异集合:" + difference); ``` 以上代码输出的结果为: ``` list1和list2的差异集合:[User{name='Alice', age=20}, User{name='Charlie', age=30}, User{name='David', age=35}, User{name='Eva', age=40}] ``` 注意,为了比较两个User对象是否相同,需要在User类中重写equals()方法和hashCode()方法。可以根据User对象的属性来比较它们是否相同。例如,可以根据name属性和age属性来比较两个User对象是否相同: ```java class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return age == user.age && Objects.equals(name, user.name); } @Override public int hashCode() { return Objects.hash(name, age); } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值