在ArrayList中添加重复元素的值

时间:2012-10-22 07:33:31

标签: java android

我有Arraylist条记录。

package com.demo.myproject;

public class Records 
{
    String countryName;
    long numberOfDays;

    public String getCountryName() {
        return countryName;
    }
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    public long getNumberOfDays() {
        return numberOfDays;
    }
    public void setNumberOfDays(long numberOfDays) {
        this.numberOfDays = numberOfDays;
    }

    Records(long days,String cName)
    {
        numberOfDays=days;
        countryName=cName;
    }
}

我的Arraylist<Records>包含值

 Singapore     12 
 Canada         3
 United Sates  12
 Singapore     21

我需要修改它以使我的输出

Canada         3
Singapore     33
United States 12

请帮我解决问题,方法。

4 个答案:

答案 0 :(得分:1)

您可以将您的记录存储在地图中,其中密钥是国家/地区。

当您收到新记录时,请检查该国家/地区是否已在该地图中,如果是,请添加天数,如果没有,则添加。

Map<String, Record> map = new HashMap<String, Record> ();

addRecord(map, someRecord);

private void addRecord(Map<String, Record> map, Record record) {
    Record inMap = map.get(record.getCountryName());
    if (inMap == null) {
        inMap = record;
    } else {
        inMap.setNumberOfDays(inMap.getNumberOfDays() + record.getNumberOfDays());
    }
    map.put(record.getCountryName(), inMap);
}

注意:

  • 我认为修改记录是好的 - 如果不是仅仅使用天数之和创建一个新记录。
  • 您仍然可以通过调用map.values();并迭代它们来获取记录集合
  • ArrayList不太适合您的用例。如果你真的需要坚持使用ArrayList,那么对于evey新记录,你需要遍历列表,检查列表中的一个记录是否与新记录具有相同的国家,如果找到它则更新该记录,或者如果没有,请添加新记录。

答案 1 :(得分:1)

public class RecordsMain {

    static ArrayList<Records> al = new ArrayList<Records>();
    static boolean flag = false;

    public static void main(String[] args) {
        Records rec1 = new Records(12,"Singapore");
        Records rec2 = new Records(3,"Canada");
        Records rec3 = new Records(12,"United States");
        Records rec4 = new Records(21,"Singapore");

        addToList(rec1);
        addToList(rec2);
        addToList(rec3);
        addToList(rec4);

        for (int i = 0; i < al.size(); i++) {     
            System.out.println(al.get(i).getCountryName() + " :: " + al.get(i).getNumberOfDays());
        }
    }

    public static void addToList(Records records) {
        for (int i = 0; i < al.size(); i++) {     
            if(al.get(i).getCountryName().equals(records.getCountryName())) {
                al.get(i).setNumberOfDays(al.get(i).getNumberOfDays()+records.getNumberOfDays());
                flag=true;
            }
        }
        if (flag == false)
            al.add(records);
    }
}

注意:

  • 函数addToList添加记录,添加时会检查CountryNames是否重复,如果是,则添加天数,并且不会标记ArrayList的任何新条目
  • 我不确定你是否也在寻找List的排序,因此没有尝试过。

答案 2 :(得分:0)

我想你自己创建这些记录。如果您不需要任何特定的元素顺序,您应该使用HashMap,并且如同assylias所说 - 只有当它们不存在时才创建国家元素。当你需要保持元素的顺序(或者稍后按名称对它们进行排序等)时,你仍然可以使用ArrayList和&#34; indexOf()&#34;方法很容易找到它们。

答案 3 :(得分:0)

我不知道你想要在那里做什么,但是如果你想用特定的标准对它进行排序那么你可以使用可比较或比较器接口来使用ArrayList中的条件对记录进行排序并使用collections.sort()方法进行排序它