return new ArrayList<T>(new LinkedHashSet<T>(list))
我想要不是去除重复对象,而是去除对象中某个字段一样的对象。
举个例子:
public static void main(String[] args) {
class Temp{
private int a;
private String b;
private BigInteger cBigInteger;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public BigInteger getcBigInteger() {
return cBigInteger;
}
public void setcBigInteger(BigInteger cBigInteger) {
this.cBigInteger = cBigInteger;
}
}
Temp temp1 = new Temp();
temp1.setA(10);
temp1.setB("hehe");
temp1.setcBigInteger(new BigInteger("1111111111111111111111111"));
Temp temp2 = new Temp();
temp2.setA(10);
temp2.setB("hehe");
temp2.setcBigInteger(new BigInteger("1111111111111111111111111"));
Temp temp3 = new Temp();
temp3.setA(10);
temp3.setB("hehe3");
temp3.setcBigInteger(new BigInteger("1111111111111111111111111"));
Temp temp4 = new Temp();
temp4.setA(10);
temp4.setB("hehe4");
temp4.setcBigInteger(new BigInteger("1111111111111111111111111"));
List<Temp> list = new ArrayList<Temp>();
list.add(temp1);
list.add(temp2);
list.add(temp3);
list.add(temp4);
//如何去除字段b重复的对象呢?
}
我想去掉Temp对象中字段b重复的对象,上面的例子就是temp1和temp2。
除了使用双重for循环从第一个开始逐个和后面的遍历remove之外,有没有什么快速的方法呢?
9 个解决方案
#1
用hashcode 和 hashset 去重复
#2
对了 需要转换成 ArrayList 在用用hashcode 和 hashset 去重复
#3
hashcode不一样
#4
map呢 键值 无重复数据。 把您要去重的那个字段作为键
#5
//如何去除字段b重复的对象呢?
System.out.println(list.size());
HashMap<String, String> map = new HashMap<String, String>();
for(int i=0;i<list.size();i++){
if(map.get(list.get(i).getB())!=null){
list.remove(i);
}
else {
map.put(list.get(i).getB(), "OK");
}
}
System.out.println(list.size());
这样能去除后面重复的...对第一次出现的这个temp1就无能为例了...除非在循环一遍,把map里面key存在的对象处理一遍。。。
就这样吧....
#6
估计我写的这个不是你想表达的...
#7
你可以用HashSet来做,然后重写hashCode以及equals方法.实现一个自定义的比较方式.然后把这个List直接new成HashSet就可以了.
#8
sdd
#9
Iterator<SourceBean> it = sourceList.iterator();
while(it.hasNext()) {
SourceBean sBean = (SourceBean)it.next();
String sourceID = sBean.getId();
if (!StringUtils.isEmpty(sourceID) ) {
try{
if ("4".equals(sourceID)) {
if (youpeng_length <= 0) {
it.remove();
}
}else if ("5".equals(sourceID)) {
if (kanke_length <= 0) {
it.remove();
}
}else if ("6".equals(sourceID)) {
if (moreTV_length <= 0 ) {
it.remove();
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
#1
用hashcode 和 hashset 去重复
#2
对了 需要转换成 ArrayList 在用用hashcode 和 hashset 去重复
#3
hashcode不一样
#4
map呢 键值 无重复数据。 把您要去重的那个字段作为键
#5
//如何去除字段b重复的对象呢?
System.out.println(list.size());
HashMap<String, String> map = new HashMap<String, String>();
for(int i=0;i<list.size();i++){
if(map.get(list.get(i).getB())!=null){
list.remove(i);
}
else {
map.put(list.get(i).getB(), "OK");
}
}
System.out.println(list.size());
这样能去除后面重复的...对第一次出现的这个temp1就无能为例了...除非在循环一遍,把map里面key存在的对象处理一遍。。。
就这样吧....
#6
估计我写的这个不是你想表达的...
#7
你可以用HashSet来做,然后重写hashCode以及equals方法.实现一个自定义的比较方式.然后把这个List直接new成HashSet就可以了.
#8
sdd
#9
Iterator<SourceBean> it = sourceList.iterator();
while(it.hasNext()) {
SourceBean sBean = (SourceBean)it.next();
String sourceID = sBean.getId();
if (!StringUtils.isEmpty(sourceID) ) {
try{
if ("4".equals(sourceID)) {
if (youpeng_length <= 0) {
it.remove();
}
}else if ("5".equals(sourceID)) {
if (kanke_length <= 0) {
it.remove();
}
}else if ("6".equals(sourceID)) {
if (moreTV_length <= 0 ) {
it.remove();
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
}