public <T> List<T> getList(List<T> a,List<T> b){
List<T> l=new ArrayList<T>();
for(T v:a){
if(b.contains(v)){
l.add(v);
}
}
return l;
}

解决方案 »

  1.   

    retainAll 取得也不是交集。
      

  2.   

    目测可能是list1,list2取的文章对象不是同一个对象,文章对象应该需要重写下equals和hashcode方法
      

  3.   

    文章对象重写一下public boolean equals(Object obj);方法,根据自己的条件判断相等。
      

  4.   

    重写equals
      

  5.   

    各位好,关键代码如下:你们看应该怎么改?
    list_function = (ArrayList<Article>) articleService.searchArticleByFunctionTop(listFunction);
    System.out.println("11111a" +list_function.size());
    list_department = (ArrayList<Article>) articleService.searchArticleByDepartmentTop(user);
    System.out.println("22222a" +list_department.size());
    list_function.retainAll(list_department);
    System.out.println("2.55555a" + list_function.size() );
    list = list_function;
      

  6.   

    你能仔细的再说下吗?谢拉主要重写文章对象的equals(文章){文章.内容.equals(this.文章内容){return true;}else{return false}}
    这里根据你需要怎么样就认为文章相同就去做相应的判断
    hashcode方法也重写一下不需要做修改
    楼主可以在网上搜下 java 比较对象相等的 很多
      

  7.   

    兄弟,你估计搞错这个方法的作用了哦。retainAll (包含将保留在此列表中的元素的 collection)
    public static void main( String[] args )
        {
         List<String> list1=new ArrayList<String>();
         list1.add("1");
         list1.add("2");
         list1.add("3");
         list1.add("4");
        
         List<String> list2=new ArrayList<String>();
         list2.add("2");
         list2.add("4");
         list2.add("6");
        
         if(list1.retainAll(list2)){
         //此处List1 只会存在存在2,4两个元素。
         //retainAll (将会把list2中与list1匹配的数据存放到list1中去 
         System.out.println("writable"+list1.size());
         }else{
         System.out.println( "Hello World!" );
         }
        }