添加新项目时如何启动计数器

How to initiate counter when new item is added

我有如下所示的数组

public static void main(String[] args) {
    List asList = Arrays.asList("banner","carousel","banner","carousel","banner");
    Set<String> mySet = new HashSet<String>(asList);
    for(String s: mySet){

     System.out.println(s + " " +Collections.frequency(asList,s));

    }

}

输出:

carousel 2
banner 3

期望输出:

banner0
carousel0
banner1
carousel1
banner2

请告诉我在这种情况下需要做什么。

你可以简单地包装add方法来在添加之前打印频率写入:

List<String> asList = Arrays.asList("banner", "carousel", "banner", "carousel", 
                                   "banner");
// ...
Set<String> mySet = new HashSet<>();
for(String s : asList) {
    addAndPrint(s, mySet);
}

private static final addAndPrint(String s, Collectection<String> c) {
    System.out.println(s + " " + Collections.frequency(c, s));
    c.add(s);
}

你需要做这个简单的改变:这里我们做了一个子列表,它只计算到当前循环项目。

public static void main(String[] args) {
        List asList = Arrays.asList("banner", "carousel", "banner", "carousel", "banner");
        for(int i=0;i<asList.size();i++) {
            System.out.println(asList.get(i)+" : " + Collections.frequency(asList.subList(0,i), asList.get(i)));
        }
    }

输出:

banner : 0
carousel : 0
banner : 1
carousel : 1
banner : 2

可以通过使用地图来实现:

   public static void main(String[] args)
    {
        final List<String> asList = Arrays.asList("banner", "carousel", "banner", "carousel", "banner");
        final Map<String, Integer> map = new HashMap<String, Integer>();

        for (final String s : asList)
        {

            if (!map.containsKey(s))
            {
                map.put(s, 0);
            }
            else
            {
                map.put(s, map.get(s) + 1);
            }
            System.out.println(s + " " + map.get(s));
        }

    }

尝试使用迭代器和标准 for 循环而不是自定义集。如果你总是有 "Carousel" 和 "Banner" 作为项目,那么声明两个计数器并在遇到它们时遇到它们。下面是一个片段

 List asList = Arrays.asList("banner","carousel","banner","carousel","banner");
        int countb = 0;
        int countc = 0;
        for (int i = 0; i < asList.size(); i++) {
            if (asList.get(i).equals("banner")) {
                countb++;
                System.out.print("banner"+countb+"\n");
            } else if (asList.get(i).equals("carousel")) {
                countc++;
                System.out.print("carousel"+countc+"\n");

            }
        }