java removeall 对象,如何为两个对象使用集合方法(removeAll()和retainAll())

I expected to result below but actually not. Even though it worked when I tried to use String instead of Item Object.

I would like to know why the reasons about that and how to code in order to get expected result.Thanks.

EXPECTED

------------------------------

removed object are:

2

same object are:

1

3

add object are:

4

------------------------------

ACTUAL

------------------------------

removed object are:

1

2

3

same object are:

add object are:

1

3

4

------------------------------

package com.javastudy;

import java.util.ArrayList;

import java.util.List;

public class CollectionCompareToObjects {

public static void main(String[] args) {

List before = new ArrayList();

List after = new ArrayList();

before.add(new Item(1L));

before.add(new Item(2L)); // delete

before.add(new Item(3L));

after.add(new Item(1L));

after.add(new Item(3L));

after.add(new Item(4L)); // added

List removed = new ArrayList(before);

removed.removeAll(after);

System.out.println("removed objects are:");

for(Item item : removed){

System.out.println(item.getId());

}

List same = new ArrayList(before);

same.retainAll(after);

System.out.println("same objects are:");

for(Item item : same){

System.out.println(item.getId());

}

List added = new ArrayList(after);

added.removeAll(before);

System.out.println("add objects are:");

for(Item item : added){

System.out.println(item.getId());

}

}

}

package com.javastudy;

public class Item {

Long id;

public Item(Long id) {

this.id = id;

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

}

解决方案

You haven't implemented equals() so ALL your Items are different objects some happen to have a field which is the same.

You need to implement equals.

I also suggest you use long instead of Long, unless you want id = null.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值