代码之家  ›  专栏  ›  技术社区  ›  user3763216

如何检查相同的ID,然后为该特定ID递增?

  •  0
  • user3763216  · 技术社区  · 9 年前

    我有一个哈希图,我们称之为 hashMap ,这是在一个方法中,我将传入一个名为 id 。我还有一个物体,我们称之为 UserObject 。因此,当前我要做的是使用以下代码将输出写入csv文件:

    for (UserObject user: hashMap.get(id)) {
                System.out.println(id);
                writer.println(id + "," + user.getTime() + "," + user.getLat() + "," + user.getLng()); // csv
            }
    

    但是这个id可能是同一个id的倍数。所以我想做的是,每当一个id用于for循环时,就会有一个递增1的计数器。因此,当再次使用相同的id时,增量将增加。但是,当使用不同的id时,这是另一个增量操作。所以基本上我的意思是,每当for循环运行时,我都想计算相同id将运行多少个实例。我该怎么做?我似乎想不出其中的逻辑。

    附笔 System.out.print(id) 是一行测试代码,输出是一块ID。

    **编辑:逻辑的工作原理类似于SQL的计数函数,但我不使用SQL,我只需要纯java

    1 回复  |  直到 9 年前
        1
  •  2
  •   JiKra    9 年前

    不确定我是否正确理解,但如果您想计算HashMap中的元素,可以尝试类似的方法。

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "A");
        map.put("2", "B");
        map.put("3", "C");
        map.put("4", "B");
        map.put("5", "B");
        map.put("6", "C");
    
        System.out.println(count("B", map)); // output is 3
    }
    
    static int count(String id, Map<String, String> map) {
        int i = 0;
        for (String val : map.values()) {
            if (id.equals(val))
                i++;
        }
        return i;
    }
    

    编辑:如果您想在每次触摸特定值时包装函数性,计数器递增,可以通过这种方法实现。

    public class IdHandler {
    
        Map<String, Integer> count = new HashMap<String, Integer>();
    
        public int count(String id) {
            return count.get(id);
        }
    
        public void export(Map<String, String> map) {
            for (String value : map.values()) {
                System.out.println(value);
    
                if (!count.containsKey(value)) {
                    count.put(value, 1);
                } else {
                    int i = count.get(value);
                    count.put(value, ++i);
                }
            }
        }
    }
    
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "A");
        map.put("2", "B");
        map.put("3", "C");
        map.put("4", "B");
        map.put("5", "B");
        map.put("6", "C");
    
        IdHandler id = new IdHandler();
        id.export(map);
    
        System.out.println(id.count("B")); // output is 3
        System.out.println(id.count("C")); // output is 2
    }