1

我有一个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

4 回答 4

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,对于每条新记录,您需要遍历列表,检查列表中的一条记录是否与新记录具有相同的国家,如果找到则更新该记录,或者如果没有,请添加新记录。
于 2012-10-22T07:36:06.500 回答
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,因此没有尝试。
于 2012-10-22T09:10:09.843 回答
0

我想您自己创建这些记录。如果您不需要任何特定的元素顺序,您应该使用 HashMap 并且正如 assylias 所说 - 仅在它们不存在时创建国家元素。当您需要保持元素的顺序(或稍后按名称等对其进行排序)时,您仍然可以使用 ArrayList 和“indexOf()”方法轻松找到它们。

于 2012-10-22T07:50:00.660 回答
0

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

于 2012-10-22T10:55:02.457 回答