Java 集合交叉点

Java 集合交叉点,java,set,Java,Set,我想将INTERAction(使用此方法)应用于包含非基元对象的集合。我写了这段代码,但我知道交叉口是空的 Concept a = new Concept("Dog"); Concept b = new Concept("Tree"); Concept c= new Concept("Dog"); HashSet<Concept> set_1 = new HashSet<Concept>();

我想将INTERAction(使用此方法)应用于包含非基元对象的集合。我写了这段代码,但我知道交叉口是空的

        Concept a = new Concept("Dog");
        Concept b = new Concept("Tree");
        Concept c= new Concept("Dog");
        HashSet<Concept> set_1 = new HashSet<Concept>();
        HashSet<Concept> set_2 = new HashSet<Concept>();

        set_1.add(a);
        set_1.add(b);
        set_1.add(c);
        SetView<Concept> inter = Sets.intersection(set_1,set_2);
        System.out.println(inter.size());  ----> I HAVE ZERO !!!
概念a=新概念(“狗”);
概念b=新概念(“树”);
概念c=新概念(“狗”);
HashSet_1=新HashSet();
HashSet_2=新HashSet();
第1组。添加(a);
第1组。添加(b);
集合1.添加(c);
SetView inter=集合交叉点(集合1、集合2);
System.out.println(inter.size());--->我没有!!!

Concept
类只包含String类型的私有成员以及get和set方法。我没有
equals()
hashCode()
首先,您需要重写Concept类上的
equals
hashCode
方法。您不需要第三方库。只用

  set_1.retainAll(set2);

set_1.retainal(set2)
将set_1转换为set_1和set_2的交集。(两个集合的交集是只包含两个集合共有的元素的集合。)

您将概念放在集合中,而不是字符串-狗,树。您还需要重写概念类的hashcode和equals,使其正常工作

这与预期的一样(注意
equals和
hashcode
概念
上)

package com.stackoverflow.so19634761;
导入com.google.common.collect.set;
导入com.google.common.collect.Sets.SetView;
导入java.util.Set;
公共类ISect{
公共静态void main(最终字符串[]args){
最终概念a=新概念(“狗”);
最终概念b=新概念(“树”);
最终概念c=新概念(“狗”);
最终集set1=Sets.newHashSet(a);
最终集合set2=集合.newHashSet(b,c);
最终SetView inter=集合交叉点(集合1、集合2);
System.out.println(inter);//=>[概念[data=Dog]]
}
私有静态类概念{
私有最终字符串数据;
//下面的代码是由eclipse生成的。
公共字符串getData(){
返回数据;
}
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
result=prime*result+((数据==null)?0:data.hashCode();
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
概念其他=(概念)obj;
如果(数据==null){
if(other.data!=null)
返回false;
}如果(!data.equals(other.data))
返回false;
返回true;
}
公共概念(字符串数据){
这个数据=数据;
}   
@凌驾
公共字符串toString(){
返回“Concept[data=“+data+”]”;
}
}
}

你能为
概念添加代码吗?(特别是
equals()
hashCode()
)它只包含一个字符串类型的私有成员以及get和set方法。我没有equals()和hashCode()。你在
集合2中添加了什么?我用覆盖equals()和hashCode()解决了这个问题。非常感谢()!!仅供参考,google collections已被弃用;使用。
package com.stackoverflow.so19634761;

import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;

import java.util.Set;

public class ISect {
    public static void main(final String[] args) {
        final Concept a = new Concept("Dog");
        final Concept b = new Concept("Tree");
        final Concept c= new Concept("Dog");
        final Set<Concept> set1 = Sets.newHashSet(a);
        final Set<Concept> set2 = Sets.newHashSet(b, c);

        final SetView<Concept> inter = Sets.intersection(set1, set2);
        System.out.println(inter); // => [Concept [data=Dog]]
    }

    private static class Concept {

        private final String data;

        // below this point code was generated by eclipse.

        public String getData() {
            return data;
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((data == null) ? 0 : data.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Concept other = (Concept) obj;
            if (data == null) {
                if (other.data != null)
                    return false;
            } else if (!data.equals(other.data))
                return false;
            return true;
        }

        public Concept(String data) {
            this.data = data;
        }   

        @Override
        public String toString() {
            return "Concept [data=" + data + "]";
        }
    }
}