如何在java中计算arraylist上的相同令牌

如何在java中计算arraylist上的相同令牌,java,arraylist,count,token,word,Java,Arraylist,Count,Token,Word,我有这样一个arraylist: ArrayList<String> hasil = new ArrayList<String>(); hasil.add("saya makan saya"); hasil.add("makan kamu saya"); hasil.add("kamu dimana"); for (int i = 0; i < hasil.size(); i++) { arr = hasil.get(i

我有这样一个arraylist:

ArrayList<String>  hasil = new ArrayList<String>();
    hasil.add("saya makan saya");
    hasil.add("makan kamu saya");
    hasil.add("kamu dimana");
 for (int i = 0; i < hasil.size(); i++) {
        arr = hasil.get(i).split(" ");
        for (int j = 0; j < arr.length; j++) {
            temp.put(arr[j], 0);
        }

    }
ArrayList hasil=new ArrayList();
添加(“saya makan saya”);
添加(“makan kamu saya”);
hasil.添加(“kamu dimana”);
我想数一数arraylist上的token。 我想要的输出如下所示: saya=3,makan=2,kamu=2,dimana=1

我有这样的代码计数:

ArrayList<String>  hasil = new ArrayList<String>();
    hasil.add("saya makan saya");
    hasil.add("makan kamu saya");
    hasil.add("kamu dimana");
 for (int i = 0; i < hasil.size(); i++) {
        arr = hasil.get(i).split(" ");
        for (int j = 0; j < arr.length; j++) {
            temp.put(arr[j], 0);
        }

    }
for(int i=0;i
但输出比我有以下几点: 3 , 3 , 2 . 只需计算令牌,而不是相同的令牌。 我已将每个单词的计数存储在Hashmap中。我想检查hashmap中是否存在单词,然后计数++; 我试过编写这样的代码,但还是错了

for (int i = 0; i < arr.length; i++) {
        for(Map.Entry<String,Integer> input : temp.entrySet()){
            if(input.getKey().contains(arr[i])){
                c++;
            }

        }
        System.out.println("" + c);
        c=0;
    }
for(int i=0;i
有人能帮我吗? 谢谢你

ArrayList hasil=new ArrayList();
    ArrayList<String>  hasil = new ArrayList<String>();
    hasil.add("saya makan saya");
    hasil.add("makan kamu saya");
    hasil.add("kamu dimana");

    Map<String, Integer> tokenCount = new HashMap<>();

    for (String phrase : hasil) {
        String[] tokens = phrase.split(" ");
        for (String token : tokens) {
            Integer count = tokenCount.get(token);
            if (count == null)
                count = 0; // first time this token was found

            tokenCount.put(token, count+1);
        }
    }
添加(“saya makan saya”); 添加(“makan kamu saya”); hasil.添加(“kamu dimana”); Map tokenCount=new HashMap(); for(字符串短语:hasil){ String[]tokens=phrase.split(“”); for(字符串标记:标记){ 整数计数=tokenCount.get(令牌); 如果(计数=null) count=0;//第一次找到此令牌时 tokenCount.put(token,count+1); } }
这可以通过Java8实现:

Map<String, Integer> counts = hasil.parallelStream()
        .flatMap(elm -> Arrays.stream(elm.split(" ")))
        .collect(Collectors.toConcurrentMap(w -> w, w -> 1, Integer::sum));

System.out.println(counts);

使用
HashMap
存储每个单词的计数。在for循环中,您可以检查
HashMap
中是否已经存在该单词,并增加该单词的计数。否则,将单词放入计数为
1
@statefi的
HashMap
中,我在HashMap上存储了搜索单词的计数。但是我如何检查hashmap中是否已经存在这个词呢?您不需要在entrySet上循环。您应该只使用
map.keySet().contains(arr[i])
来检查您的映射中是否已经存在一个单词(我假设它存储在arr[i]中)。@statefi非常感谢您的帮助:)