<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫暖潔森

    勇敢做自己

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      13 隨筆 :: 1 文章 :: 70 評論 :: 0 Trackbacks
    最近使用apache的commons-collections組件進(jìn)行集合的操作,程序需要用到CollectionUtils類對集合進(jìn)行刪除操作,
    具體如下:

    有兩個集合Collection a,Collection b,需要把b中與a中集合元素相同的剔除掉,只留下在a集合中不包含b的元素,測試方法如下:

    @Test
     public void testCollectionRemove() {
      ArrayList<String> list = new ArrayList<String>();
      list.add("11");
      list.add("22");
      list.add("33");
      list.add("44");

      ArrayList<String> list1 = new ArrayList<String>();
      list1.add("22");
      list1.add("44");
      list1.add("55");
      Collection c = CollectionUtils.removeAll(list, list1);
      assertEquals(true, ((List) c).contains("11"));
      assertEquals(true, ((List) c).contains("33"));
      assertEquals(false, ((List) c).contains("22"));
      assertEquals(false, ((List) c).contains("44"));

     }


    java.lang.AssertionError: expected:<true> but was:<false>
     at org.junit.Assert.fail(Assert.java:74)
     at org.junit.Assert.failNotEquals(Assert.java:448)
     at org.junit.Assert.assertEquals(Assert.java:102)
     at org.junit.Assert.assertEquals(Assert.java:117)
     at com.gresoft.components.TestCommonsCollection.testCollectionRemove(TestCommonsCollection.java:90)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:585)
     at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
     at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
     at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
     at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
     at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
     at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
     at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
     at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
     at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
     at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:26)
     at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:36)
     at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

     


    在第一個assertEquals中junit抱應(yīng)該是false,實際應(yīng)該是true,查看源碼發(fā)現(xiàn):

     public static Collection removeAll(Collection collection, Collection remove)
        {
            return ListUtils.retainAll(collection, remove);
        }

     public static List retainAll(Collection collection, Collection retain)
        {
            List list = new ArrayList(Math.min(collection.size(), retain.size()));
            for(Iterator iter = collection.iterator(); iter.hasNext();)
            {
                Object obj = iter.next();
                if(retain.contains(obj))
                    list.add(obj);
            }

            return list;
        }

    上面紅色字體是兩個集合有相同元素的留下,而不是不相同的留下。這個應(yīng)該改成if(!retain.contains(obj))


    后來發(fā)現(xiàn)
    CollectionUtils.removeAll(list, list1);和CollectionUtils.retainAll(list, list1);功能是一樣的,所以這跟它文檔是不符合的,大家在使用時候注意!

    posted on 2008-01-03 12:09 harry520 閱讀(1979) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 亚洲性猛交XXXX| 亚洲成AV人在线观看网址| 7777久久亚洲中文字幕蜜桃| 成在人线av无码免费高潮喷水| 精品国产香蕉伊思人在线在线亚洲一区二区| 老司机午夜在线视频免费| 免费日本黄色网址| 日本高清免费中文在线看| 亚洲AV无码专区日韩| 久青草视频在线观看免费 | 波多野结衣视频在线免费观看| 亚洲av无码专区首页| 免费国产怡红院在线观看| 亚洲视频在线免费| 亚洲av日韩av不卡在线观看| 99久久精品日本一区二区免费 | 中文在线免费不卡视频| 亚洲国产精品无码久久久不卡| 久久久久久AV无码免费网站下载| 久久久亚洲裙底偷窥综合| 国产精品69白浆在线观看免费 | 亚洲国产成人精品电影| 无码人妻久久一区二区三区免费丨| 亚洲a∨无码一区二区| 国产成人毛片亚洲精品| 久久久久久国产精品免费无码 | 少妇中文字幕乱码亚洲影视| 男女超爽刺激视频免费播放| 精品在线视频免费| 国产亚洲人成网站观看| 1000部拍拍拍18勿入免费视频软件| 亚洲国产精品99久久久久久| 国产亚洲精品福利在线无卡一| ww在线观视频免费观看| 国产亚洲人成在线播放| 亚洲AV无码专区电影在线观看| 成人免费在线视频| a级精品九九九大片免费看| 在线aⅴ亚洲中文字幕| 亚洲人成亚洲人成在线观看| 好吊妞788免费视频播放|