在java arraylist中查找重复项

在java arraylist中查找重复项,java,Java,我有一个arraylist看起来像这样 [week=Mon May 19 00:00:00 EST 2014, projectID=21793, hours=1.5, defaultWorkType=Ps] 我想过滤所有在projectd和week字段上被消磨掉的值 并找出小时数的总和 for an eg: [week=Mon May 19 00:00:00 EST 2014, projectID=21793, hours=1, defaultWorkType=Ps] [week=Mon

我有一个arraylist看起来像这样

[week=Mon May 19 00:00:00 EST 2014, projectID=21793, hours=1.5, defaultWorkType=Ps]
我想过滤所有在projectd和week字段上被消磨掉的值 并找出小时数的总和

for an eg:
 [week=Mon May 19 00:00:00 EST 2014, projectID=21793, hours=1, defaultWorkType=Ps]
 [week=Mon May 19 00:00:00 EST 2014, projectID=21793, hours=3, defaultWorkType=Ps]
 [week=Mon May 19 00:00:00 EST 2014, projectID=21793, hours=2, defaultWorkType=Ps]
所以答案应该是这样的,

[week=Mon May 19 00:00:00 EST 2014, projectID=21793, hours=6, defaultWorkType=Ps]
私有列表查找到的总LPSHRSLIST筛选器DPS{

    List<PreSale> li = new ArrayList<PreSale>();

    for(Integer i=0 ; i<filteredPS.size();i++)
    {
        Integer x=0;
        while(x<filteredPS.size()){
            if(filteredPS.get(i)==filteredPS.get(x++)){
                li.add(filteredPS.get(i));
                System.out.println("--------------------------"+filteredPS.get(i));
                System.out.println("*** "+ filteredPS.get(x++));
            }
        }
    }

    return filteredPS;
}

迭代数组列表并将project+weekto添加到哈希映射中,其中值为小时数。如果该键已存在,则只需更新小时数。哈希映射将包含生成所需输出所需的信息

也许是这样的:

private List<PreSale> findTotalPSHrs(List<PreSale> data) {
    HashMap<String, Integer> cumulative = new HashMap<String, Integer>();

    for (PreSale item : data) {
        String key = item.getWeek() + "," + item.getProjectID().toString();
        if (cumulative.containsKey(key)) {
            cumulative.put(key, cumulative.get(key) + data.getHours());
        } else {
            cumulative.put(key, data.getHours());
        }
    }

    // at this point, cumulative contains a single entry for each project/week with
    // the cumulative hours.  Now we need to convert that into your output list.

    List<PreSale> returnList = new ArrayList<PreSale>();
    for (Map.Entry<String, Integer> entry : cumulative.entrySet()) {
        // "<week>,<project>"
        String[] parts = entry.getKey().split(",");
        PreSale saleObj = new PreSale();
        saleObj.setWeek(parts[0]);
        saleObj.setProject(Integer.parseInt(parts[1]));
        saleObj.setHours(entry.getValue());
        returnList.add(saleObj);
    }

    return returnList;
}

这可能有点过分,但这是我想到的第一件事。

你试过什么了吗?输出应该是什么:[week=Mon may 19 00:00:00 EST 2014,projectID=21793,hours=1,defaultWorkType=a][week=Mon may 19 00:00:00 EST 2014,projectID=21793,hours=3,defaultWorkType=B]?arraylist中存储了什么?字符串?用户定义的对象?您的javascript数组减速完全是错误的incorrect@ali-shahrokhi这是一个Java ArrayList,不是JavaScript数组。对我来说这听起来很棒。我只是一个Java新手。有什么线索我可以做到吗?我不知道我可以在哈希图上有2个键。谢谢堆!你非常有帮助;