具有长度键和出现次数值的Java映射

具有长度键和出现次数值的Java映射,java,hashmap,Java,Hashmap,我有一个大的文本文件,我已经将其处理成单个单词(在我的程序中称为标记)。我需要将这些标记添加到一个地图中,该地图有一个单词长度的键和一个出现次数的值。例如,(hi,to,say)的列表将给出(2:2,3:1)。忽略1键或任何其他键,因为不存在它们的情况 我想: private Map<Integer, Integer> tokenSizes = new HashMap<Integer, Integer>; public void processToken(String

我有一个大的文本文件,我已经将其处理成单个单词(在我的程序中称为标记)。我需要将这些标记添加到一个地图中,该地图有一个单词长度的键和一个出现次数的值。例如,(hi,to,say)的列表将给出(2:2,3:1)。忽略1键或任何其他键,因为不存在它们的情况

我想:

private Map<Integer, Integer> tokenSizes = new HashMap<Integer, Integer>;

public void processToken(String token)
{
    Integer value = tokenSizes.get(token);

    tokenSizes.put(token.length(), (value == null) ? 1 : value + 1);    
}
private-Map-tokensize=new-HashMap;
公共void进程令牌(字符串令牌)
{
整数值=令牌大小。获取(令牌);
tokenSizes.put(token.length(),(value==null)?1:value+1;
}

工作?

在示例代码中,您试图获取与令牌字符串匹配的密钥,令牌字符串是原始单词,而不是您想要的。首先要获取字符串标记的长度,如果它作为键存在于
映射中
,则获取存储的该键的计数值并更新计数。如果它在映射中还不存在,那么您希望将长度存储为键,将值存储为1(首次计数)

下面是一个示例程序,它可以做到这一点:

import java.util.HashMap;
import java.util.Map;

public class TokenSizes {

    Map<Integer, Integer> tokenSizes = new HashMap<>();

    public void processToken(String token){
        Integer len = token.length();
        if(tokenSizes.containsKey(len)){
            tokenSizes.put(len, tokenSizes.get(len) + 1);
        }
        else{
            tokenSizes.put(len, 1);
        }
    }

    public void printTokenSizes(){
        System.out.println("Token Sizes:\n" + tokenSizes);
    }

    public static void main(String[] args) {
        TokenSizes ts = new TokenSizes();
        ts.processToken("hi");
        ts.processToken("to");
        ts.processToken("say");

        ts.printTokenSizes();
    }
}
import java.util.HashMap;
导入java.util.Map;
公共类令牌大小{
Map tokensize=new HashMap();
公共void进程令牌(字符串令牌){
整数len=token.length();
if(令牌大小。容器大小(len)){
tokensize.put(len,tokensize.get(len)+1);
}
否则{
令牌大小。put(len,1);
}
}
公共void printTokenSizes(){
System.out.println(“令牌大小:\n”+令牌大小);
}
公共静态void main(字符串[]args){
TokenSizes ts=新的TokenSizes();
ts.processToken(“hi”);
ts.processToken(“to”);
ts.processToken(“say”);
ts.printTokenSizes();
}
}
这将生成输出:

令牌大小:

{2=2,3=1}


根据您的要求,

public void processToken(String token)
{
    Integer value = tokenSizes.get(token.length());

    tokenSizes.put(token.length(), (value == null) ? 1 : value + 1);    
}

你试的时候发生了什么?