Dalla documentazione che si è collegato:
The Counter la classe è simile a borse o multiset in altre lingue.
Java non ha una classe Multiset
o un analogo. Guava ha una collezione MultiSet
, che fa esattamente quello che vuoi.
in puro Java, è possibile utilizzare un Map<T, Integer>
e il nuovo merge
metodo:
final Map<String, Integer> counts = new HashMap<>();
counts.merge("Test", 1, Integer::sum);
counts.merge("Test", 1, Integer::sum);
counts.merge("Other", 1, Integer::sum);
counts.merge("Other", 1, Integer::sum);
counts.merge("Other", 1, Integer::sum);
System.out.println(counts.getOrDefault("Test", 0));
System.out.println(counts.getOrDefault("Other", 0));
System.out.println(counts.getOrDefault("Another", 0));
uscita:
2
3
0
Puoi avvolgere questo comportamento in un class
in poche righe di codice:
public class Counter<T> {
final Map<T, Integer> counts = new HashMap<>();
public void add(T t) {
counts.merge(t, 1, Integer::sum);
}
public int count(T t) {
return counts.getOrDefault(t, 0);
}
}
Uso come questo:
final Counter<String> counts = new Counter<>();
counts.add("Test");
counts.add("Test");
counts.add("Other");
counts.add("Other");
counts.add("Other");
System.out.println(counts.count("Test"));
System.out.println(counts.count("Other"));
System.out.println(counts.count("Another"));
uscita:
2
3
0
fonte
2015-01-31 17:38:54
Java non lo fa, ma è possibile implementa facilmente uno dei tuoi. –