【问题标题】:Combine Array value with same key将数组值与相同的键组合
【发布时间】:2013-02-01 08:07:36
【问题描述】:

我有一个包含我所有数据的列表:setData

List<Map<String, Integer>> setData = new ArrayList<Map<String, Integer>>();
Map<String, Integer> set;

并且值是这样添加的(这发生在循环中,当它遍历游标时):

set = new HashMap<String, Integer>();
set.put("value", value);
set.put("day", day);
setData.add(set);

数组按之后排序,从“day”的最低值到“day”的最高值。

我的问题:我想将所有“值”与相同的“天”结合起来,需要添加或减去“值”,我的最终数组每天只保存一个值.

【问题讨论】:

  • 似乎是一个复杂的结构。你考虑过使用 SQLite 吗?
  • 您可以在填充原始结构时合并这些值,还是必须稍后再做?另一方面,如果您要在每个 HashMap 中始终存储一个“值”和一个“天”值,那么您对它的使用不当。只需使用这两个属性定义一个 JavaBeans 类。
  • 为什么你需要一个哈希列表,什么时候最后一整天都是唯一的?
  • @DoctororDrive 不,我需要它作为一个数组(或类似功能的东西)。
  • @thelawnmowerman 是的,我可以。

标签: java android arrays map hashmap


【解决方案1】:

试试这个方法,去掉不必要的字段:

set = new HashMap<Integer, Integer>(); 

在每个循环中:

if (set.containsKey(day))
{
  value += set.get(day);
} 

set.put(day, value);

这样你每天就会有一个哈希值。

【讨论】:

  • 非常好的主意,但我想它在我的情况下不起作用,因为数组是在插入之后排序的,取决于日期值(从低到高)。
【解决方案2】:

试试这个:

 Map<Integer, Integer> dayValue = new HashMap<Integer, Integer>();
 for(Map<String, Integer> set : setData) {
     int day = set.get("day"); 
     int value = set.get("value");
     int storedValue = dayValue.get(day);
     // do your addition or subtraction with value and storedValue,
     // and update the map after that
     dayValue.put(day, storedValue);
 }

因此,对于每一天,您将拥有 a 价值。在这种情况下不需要使用array,因为您想为每个unique 天保留一个值,hashmap 就可以了。

【讨论】:

    猜你喜欢
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多