添加新项目时如何启动计数器
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");
}
}
我有如下所示的数组
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");
}
}