为什么我的方法返回错误的结果

时间:2015-08-06 04:36:54

标签: java arrays methods

我有一个测试:

    public void testGetUniqueResults(){
APRecord p1 = new APRecord();
p1.settId("l1");
APRecord p2 = new APRecord();
p2.setId("l2");
APRecord p3 = new APRecord();
p3.setId("l1");
APRecord p4 = new APRecord();
p4.setId("l4");
List< APRecord > listPatch = new ArrayList< APRecord >();
listPatch.add(p1);
listPatch.add(p2);
listPatch.add(p3);
listPatch.add(p4);

List<ARecord> recs = new ArrayList<ARecord>();
recs.addAll(listPatch);
unique(recs);
System.out.println("records" + recs); //return all the 4 results whereas it should return 3



}

和方法:

    public List<ARecord> unique(List<Record> list) {
    System.out.println(list);

    HashMap<String, ARecord > uniqueRecs = new HashMap<String, ARecord >();

    for(ARecord records:list){
        if(!uniqueRecs.containsKey(records.getId())){
            uniqueRecs.put(records.getId(), records);
        }
    }
    List< ARecord > finalRecs = new ArrayList< ARecord>(uniqueRecs.values());
    for(ARecord record:finalRecs){
        System.out.println("records final in method "+record);
    }


    return finalRecs; //returns correct result
}

我的finalRecs in方法unique返回预期的结果但是当我将recs传递给我的唯一列表时,它返回我的所有结果,而我期待三个结果但是我得到全部四个,即使我的方法唯一返回3个结果。我哪里做错了?任何帮助赞赏。

1 个答案:

答案 0 :(得分:0)

您看到4个结果的原因是您从不使用方法unique()中的返回值。并且您也不会对传入的输入List进行操作,因此您的方法中的工作目前是徒劳的。这是您的代码目前所在的位置:

List<ARecord> recs = new ArrayList<ARecord>();
recs.addAll(listPatch);
unique(recs);           // you never use the return value!

用以下内容替换此代码,所有内容都应该是好的:

List<ARecord> recs = new ArrayList<ARecord>();
recs.addAll(listPatch);
recs = unique(recs);    // you should be fine now