Java 增加出现次数而不是添加重复项的集合
是否存在只存储唯一字符串的集合,但计算此字符串被添加的次数?Java 增加出现次数而不是添加重复项的集合,java,collections,Java,Collections,是否存在只存储唯一字符串的集合,但计算此字符串被添加的次数? 因此,每当我再次尝试添加相同的字符串/项时,项的数量保持不变,但给定项的出现次数将增加?据我所知,没有此类内置集合,但您可以通过使用映射集合: Map<String, Integer> map = new HashMap<>(); String sample = "foo"; if (map.containsKey(sample)) map.put(sample, map.get(sample) + 1
因此,每当我再次尝试添加相同的字符串/项时,项的数量保持不变,但给定项的出现次数将增加?据我所知,没有此类内置集合,但您可以通过使用
映射
集合:
Map<String, Integer> map = new HashMap<>();
String sample = "foo";
if (map.containsKey(sample))
map.put(sample, map.get(sample) + 1);
输出:
3
希望有帮助。据我所知,没有内置的集合,但您可以通过使用
Map
collection:
Map<String, Integer> map = new HashMap<>();
String sample = "foo";
if (map.containsKey(sample))
map.put(sample, map.get(sample) + 1);
输出:
3
希望有帮助。您可以使用一个
HashMap
并在其周围包装一些代码:
public class CounterMap<K> {
private final Map<K, Integer> internalMap = new HashMap<K, Integer>();
public void increment(K key) {
initKeyIfNew(key);
Integer oldValue = internalMap.get(key);
Integer newValue = oldValue + 1;
internalMap.put(key, newValue);
}
public int getCount(K key) {
initKeyIfNew(key);
return internalMap.get(key);
}
private void initKeyIfNew(K key) {
if (internalMap.get(key) == null) {
internalMap.put(key, 0);
}
}
}
公共类计数器映射{
私有最终映射internalMap=新HashMap();
公共无效增量(K键){
initKeyIfNew(key);
整数oldValue=internalMap.get(键);
整数newValue=oldValue+1;
internalMap.put(key,newValue);
}
公共整数getCount(K键){
initKeyIfNew(key);
返回internalMap.get(key);
}
私有void initKeyIfNew(K密钥){
if(internalMap.get(key)==null){
internalMap.put(键,0);
}
}
}
然后你可以这样使用它:
CounterMap<String> myCounterMap = new CounterMap<String>();
myCounterMap.increment("hello");
...
CounterMap myCounterMap=new CounterMap();
myCounterMap.increment(“你好”);
...
您可以使用HashMap
并在其周围包装一些代码:
public class CounterMap<K> {
private final Map<K, Integer> internalMap = new HashMap<K, Integer>();
public void increment(K key) {
initKeyIfNew(key);
Integer oldValue = internalMap.get(key);
Integer newValue = oldValue + 1;
internalMap.put(key, newValue);
}
public int getCount(K key) {
initKeyIfNew(key);
return internalMap.get(key);
}
private void initKeyIfNew(K key) {
if (internalMap.get(key) == null) {
internalMap.put(key, 0);
}
}
}
公共类计数器映射{
私有最终映射internalMap=新HashMap();
公共无效增量(K键){
initKeyIfNew(key);
整数oldValue=internalMap.get(键);
整数newValue=oldValue+1;
internalMap.put(key,newValue);
}
公共整数getCount(K键){
initKeyIfNew(key);
返回internalMap.get(key);
}
私有void initKeyIfNew(K密钥){
if(internalMap.get(key)==null){
internalMap.put(键,0);
}
}
}
然后你可以这样使用它:
CounterMap<String> myCounterMap = new CounterMap<String>();
myCounterMap.increment("hello");
...
CounterMap myCounterMap=new CounterMap();
myCounterMap.increment(“你好”);
...
使用Java 8:
Map<String, Integer> map = new HashMap<>();
这样做的目的是添加字符串s
,并将该值设置为1
,如果该值还不存在。如果它已经存在,那么它将获取当前值和您要添加的新值(再次为1)并将它们相加,然后将它们放回映射中。使用Java 8:
Map<String, Integer> map = new HashMap<>();
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class UniqueStringCount {
public static void main(String[] args) {
boolean takeUserInput = true;
HashMap<String, Integer> uniqueStringMap = new HashMap<>();
int counter = 0;
System.out.println("Welcome. To close the program type exit.");
System.out.println();
do {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the unique string");
String userInput = scan.next();
if(userInput.equalsIgnoreCase("exit")) {
takeUserInput = false;
scan.close();
}
System.out.println();
if(!userInput.equalsIgnoreCase("exit")) {
if(uniqueStringMap.containsKey(userInput)) {
counter = uniqueStringMap.get(userInput);
uniqueStringMap.put(userInput, ++counter);
continue;
}
counter = 0;
uniqueStringMap.put(userInput, ++counter);
}
} while(takeUserInput);
if(!uniqueStringMap.isEmpty()) {
for(Map.Entry<String, Integer> entry : uniqueStringMap.entrySet()) {
System.out.println("String " + entry.getKey() + " was added " + entry.getValue() + " times.");
System.out.println();
}
System.out.println("Bye bye.");
}
}
}
这样做的目的是添加字符串s
,并将该值设置为1
,如果该值还不存在。如果它已经存在,那么它将获取当前值和正在添加的新值(再次为1)并将它们相加,然后将其放回映射中。import java.util.HashMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class UniqueStringCount {
public static void main(String[] args) {
boolean takeUserInput = true;
HashMap<String, Integer> uniqueStringMap = new HashMap<>();
int counter = 0;
System.out.println("Welcome. To close the program type exit.");
System.out.println();
do {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the unique string");
String userInput = scan.next();
if(userInput.equalsIgnoreCase("exit")) {
takeUserInput = false;
scan.close();
}
System.out.println();
if(!userInput.equalsIgnoreCase("exit")) {
if(uniqueStringMap.containsKey(userInput)) {
counter = uniqueStringMap.get(userInput);
uniqueStringMap.put(userInput, ++counter);
continue;
}
counter = 0;
uniqueStringMap.put(userInput, ++counter);
}
} while(takeUserInput);
if(!uniqueStringMap.isEmpty()) {
for(Map.Entry<String, Integer> entry : uniqueStringMap.entrySet()) {
System.out.println("String " + entry.getKey() + " was added " + entry.getValue() + " times.");
System.out.println();
}
System.out.println("Bye bye.");
}
}
}
导入java.util.Map;
导入java.util.Scanner;
公共类UniqueStringCount{
公共静态void main(字符串[]args){
布尔takeUserInput=true;
HashMap uniqueStringMap=新HashMap();
int计数器=0;
System.out.println(“欢迎。关闭程序类型exit”);
System.out.println();
做{
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入唯一字符串”);
字符串userInput=scan.next();
if(userInput.equalsIgnoreCase(“退出”)){
takeUserInput=false;
scan.close();
}
System.out.println();
如果(!userInput.equalsIgnoreCase(“退出”)){
if(uniqueStringMap.containsKey(用户输入)){
计数器=uniqueStringMap.get(userInput);
uniqueStringMap.put(用户输入,+计数器);
继续;
}
计数器=0;
uniqueStringMap.put(用户输入,+计数器);
}
}while(takeUserInput);
如果(!uniqueStringMap.isEmpty()){
对于(Map.Entry:uniqueStringMap.entrySet()){
System.out.println(“字符串”+entry.getKey()+“被添加”+entry.getValue()+“次”);
System.out.println();
}
System.out.println(“再见”);
}
}
}
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Scanner;
公共类UniqueStringCount{
公共静态void main(字符串[]args){
布尔takeUserInput=true;
HashMap uniqueStringMap=新HashMap();
int计数器=0;
System.out.println(“欢迎。关闭程序类型exit”);
System.out.println();
做{
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入唯一字符串”);
字符串userInput=scan.next();
if(userInput.equalsIgnoreCase(“退出”)){
takeUserInput=false;
scan.close();
}
System.out.println();
如果(!userInput.equalsIgnoreCase(“退出”)){
if(uniqueStringMap.containsKey(用户输入)){
计数器=uniqueStringMap.get(userInput);
uniqueStringMap.put(用户输入,+计数器);
继续;
}
计数器=0;
uniqueStringMap.put(用户输入,+计数器);
}
}while(takeUserInput);
如果(!uniqueStringMap.isEmpty()){
对于(Map.Entry:uniqueStringMap.entrySet()){
System.out.println(“字符串”+entry.getKey()+“被添加”+entry.getValue()+“次”);
System.out.println();
}
System.out.println(“再见”);
}
}
}
类似于@luk2302 CountedSet的内容被重新声明,更好的解决方案是使用Google Guavosomething中的Multiset,类似于@luk2302 CountedSet的内容被重新声明,更好的解决方案是使用Google Guava中的Multiset