如何计算 java 中 arraylist 上的相同标记

how to count same token on arraylist in java

我有一个像这样的数组列表:

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

我想计算 arraylist 上的标记。 我想要这样的输出: saya = 3, makan = 2, kamu = 2, dimana = 1

我有这样的代码数:

 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);
        }

    }

但输出比我这样: 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;
    }

谁能帮帮我? 谢谢

    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);
        }
    }

这可以通过 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);

输出将是:

{saya=3, dimana=1, makan=2, kamu=2}