2017-03-17 1 views
0

Ich habe eine Arraylist wie folgt aus:wie gleiche Token auf Arraylist in Java zählen

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

und ich will Token auf Arraylist zählen. Ausgabe, die ich so wollen: Saya = 3, makan = 2, kamu = 2, dimana = 1

Ich habe Code Zahl wie folgt aus:

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

    } 

aber ausgegeben, als ich wie dieses: 3, 3, 2. Zählen Sie einfach das Token nicht das gleiche Token. ich habe die Zählung jedes Wortes in Hashmap gespeichert. und ich möchte prüfen, ob das Wort in hashmap existiert, dann zähle ++; Ich habe versucht, Code wie diesen zu machen, aber immer noch falsch

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

kann mir jemand helfen? danke

+1

Verwenden Sie ein 'HashMap ' speichern die Anzahl der jedes Wort. In Ihrer for-Schleife können Sie überprüfen, ob das Wort in der HashMap bereits vorhanden ist, um die Anzahl für dieses Wort zu erhöhen. Ansonsten setze das Wort in 'HashMap' mit dem Zählwert von' 1'. – STaefi

+0

@STaefi Ich habe die Anzahl der gespeicherten Wörter auf hashmap gespeichert. aber wie kann ich prüfen, ob das Wort in der hashmap bereits existiert? –

+0

https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#containsKey(java.lang.Object) –

Antwort

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

danke sehr hilfreich :) –

0

Das mit Java8 erreicht werden kann:

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

Der Ausgang wäre:

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

danke sehr hilfreich;) –