当前位置: 首页 > 知识库问答 >
问题:

在ArrayList中添加重复元素的值

那鹏
2023-03-14

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

 Singapore     12 
 Canada         3
 United Sates  12
 Singapore     21

我需要修改它,使我的输出是

Canada         3
Singapore     33
United States 12

请帮我解决问题,方法。


共有3个答案

步博艺
2023-03-14

我想你自己创造了这些记录。如果您不需要元素的任何特定顺序,您应该使用HashMap,正如assylias所说的那样——仅在国家元素不存在时创建它们。当您需要保持元素的顺序(或者稍后按名称等排序)时,您仍然可以使用ArrayList和indexOf()方法来轻松查找它们。

巫马刚洁
2023-03-14
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
  • 我不确定你是否也在寻找列表的排序,因此没有尝试。
令狐宏浚
2023-03-14

你可以把你的记录储存在地图上,地图上的关键是国家。

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

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);
}

笔记

  • 我假设可以修改记录——如果不只是使用天数总和创建一个新记录的话
 类似资料:
  • 实际上,我已经实现了listview,在这里我们可以通过点击与之相关的togglebutton来选择合适的行。我正在将该行中的数据添加到arraylist。但是,我面临的问题是,当我选择行1,然后选择行2时,arraylist中的数据如下:(行1数据,行1数据,行2数据),这里行1数据是重复的。。但是,我需要这个:(第1行数据,第2行数据)。甚至我也尝试使用clear()方法。但是,当我使用它时,

  • 问题内容: 我是Groovy的新手,尽管阅读了许多有关此的文章和问题,但我仍然不清楚发生了什么。到目前为止,据我了解,当您在Groovy中创建新数组时,底层类型是Java ArrayList。这意味着它应该可调整大小,您应该能够将其初始化为空,然后通过add方法动态添加元素,如下所示: 编译,但是在运行时失败:方法的无签名:[LMyType; .add()适用于参数类型:(MyType)值:[My

  • 问题内容: 我有这个android代码,它从服务器中获取一个JSON并从该JSON填充一个ArrayList,我在onresponse空隙内检查了ArrayList“ meals”的大小,它给了我1,但是当我在StringRequest对象后对其进行检查时,我得到了0个项目。进餐在全局范围内定义,并在oncreateview函数内部进行初始化代码: 问题答案: 这里的问题是关于了解任务如何工作的。

  • 问题内容: 我需要分离并计算arraylist中有多少个相同的值,并根据出现的次数进行打印。 我有一个名为digits的arraylist: 我创建了一个将每个值分开并将其保存到新数组的方法。 之后,我得到了一个名为数字的新数组。我在此数组上使用排序 和我的ArrayList看起来像这样: 它具有: 我需要根据数字的多少来打印出数字字符串,所以它看起来应该像这样:1354678290 问题答案:

  • 问题内容: 我需要将元素添加到队列中,但是当我调用函数添加元素时,我希望它在数组的开头添加元素(因此它具有最低的索引),并且如果数组有10个元素添加一个新的结果将删除最旧的元素(具有最高索引的元素)。 有没有人有什么建议? 问题答案: 具有方法,因此您可以使用: 之后,您可以使用以下命令删除最后一个元素: 但是,您可能需要重新考虑您的要求或使用其他数据结构,例如 编辑 也许看看Apache的: 是