2017-05-02 6 views
-3

Duplizieren von Count occurrences of words in ArrayList in Duplikate zählenWie Liste <Integer>

i zählt Duplikate meiner JSON Antwort versucht.

Im bekam Wert von 1,2 ... to 13,14

Ersten, was ich tun ist, sortiert die Liste:

Collections.sort(calues); 

kann jeder Wert 4-mal verwendet werden.

So endlich habe ich Liste mit 1,1,1,1,2,2,2,2.....14,14,14,14

Ich brauche wiederholte Werte zu zählen und wenn jeder Wert wie 1,2 wird etc 3 mal i Nachricht an Benutzer geben müssen wiederholt werden.

Wie kann ich das tun? Vielen Dank für Hilfe :)

mit Tutorial gehen i erstellen Diesen:

public int count(List<Integer> nums) { 
    boolean inclump = false; 
    int clumpcnt = 0; 
    for (int i = 1; i < nums.size(); i++) { 
     if (Objects.equals(nums.get(i), nums.get(i - 1))) { 
      if (!inclump) { 
       inclump = true; 
       clumpcnt++; 
       if(clumpcnt ==3){ 
        Utils.showToast(getApplicationContext(), "WOW VALUE REPEATED 3 TIMES, YOU WIN"); 
       } 
      } 
     } else { 
      inclump = false; 
     } 
    } 
    return clumpcnt; 
} 

aber die Werte zählen und wenn Werte wie 2,2 und 3,3 und 4,4 dann diese Funktion eingeben

if(clumpcnt ==3){ 
         Utils.showToast(getApplicationContext(), "WOW VALUE REPEATED 3 TIMES, YOU WIN"); 
        } 

erklärte ich eine Liste private List<Integer> cardsValues = new ArrayList<>();

Dann habe ich Werte hier:

ersten 5 auf Startanwendung:

@Override 
public void onNext(@NonNull Cards cards) { 
    cardsArray = cards.getArrayCards(); 
for (Card item : cardsArray) { 
imgUrls.add(item.getImage()); 
cardsValues.add(item.getRank()); 

} }

Und das auf jeden Klick mit "neuen Karten Get"

Im Hinzufügen neuen Wertes mit der gleichen Methode

for (Card item : cardsArray) { 
imgUrls.add(item.getImage()); 
cardsValues.add(item.getRank()); 
} 

Und hier rufe ich die Methode

Hier 210
private void checkDuplicateAchievement() { 
Collections.sort(cardsValues); 
count(cardsValues); 
} 

ist meine volle Methode

private void getCards(final String deck_id, final int count) { 
     cardApi.getCards(deck_id, count) 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Observer<Cards>() { 
        @Override 
        public void onSubscribe(@NonNull Disposable d) { 

        } 

        @Override 
        public void onNext(@NonNull Cards cards) { 
         cardsArray = cards.getArrayCards(); 
         for (Card item : cardsArray) { 
          imgUrls.add(item.getImage()); 
          cardsValues.add(item.getRank()); 
         } 
         cardsRecyclerView.notifyDataSetChanged();     recyclerView.smoothScrollToPosition(cardsRecyclerView.getItemCount()); 

         checkDuplicateAchievement(); 
        } 

        @Override 
        public void onError(@NonNull Throwable e) { 

        } 

        @Override 
        public void onComplete() { 
        } 
       }); 
    } 
+0

Duplizieren von https://stackoverflow.com/questions/5211194/count-occurrences-of-words-in-arraylist – Mani

Antwort

1

Sie Ihre Liste sortieren und dann Schleife die sortierten Elemente und vergleichen Werte an benachbarten positions.If sie entsprechen dann Duplikate vorhanden sind

3

Sie Gebrauch machen können einer HashMap wie unten. ** Nicht getestet, Java nach langer Zeit tippen !, Nur um Ihnen eine Idee zu geben.

 public int count(List<Integer> nums) { 
      Map<Integer, Integer> countMap = new HashMap<Integer, Integer>(); 
      for (int i = 1; i < nums.size(); i++) { 
      if(countMap.get(nums[i]) != null){ 
       countMap.set(i, countMap.get(nums[i]) + 1) 
       if (countMap.get(i) >=3){ 
       Utils.showToast(getApplicationContext(), "WOW VALUE REPEATED 3 TIMES, YOU WIN"); 
       } 
      }else{ 
       countMap.set(i, 1) 
      } 
      } 
    } 
+0

Dass keine Arbeit :( – Rodriquez

2

Versuchen Sie folgendes:

public int count(List<Integer> nums) { 
    boolean inclump = false; // Not used 

    int clumpcnt = 0; 
    int value = nums.get(0); 
    for (int i = 1; i < nums.size(); i++) { 
     if (Objects.equals(value, nums.get(i))) { 
      clumpcnt++; 
      if (clumpcnt == 3) { 
       Utils.showToast(getApplicationContext(), "WOW VALUE REPEATED 3 TIMES, YOU WIN"); 
       Log.d("COUNT", "WOW VALUE " + String.valueOf(value) + " REPEATED 3 TIMES, YOU WIN"); 

       clumpcnt = 0; 
      } 
     } else { 
      clumpcnt = 0; 
      value = nums.get(i); 
     } 
    } 

    return clumpcnt; 
} 

FYI,nums Liste enthält 1,1,1,1,2,2,2,2,3,3,3,3

OUTPUT LOG:

28078-28078/com.ferdous.stackoverflowanswer D/COUNT: WOW VALUE 1 REPEATED 3 TIMES, YOU WIN 
28078-28078/com.ferdous.stackoverflowanswer D/COUNT: WOW VALUE 2 REPEATED 3 TIMES, YOU WIN 
28078-28078/com.ferdous.stackoverflowanswer D/COUNT: WOW VALUE 3 REPEATED 3 TIMES, YOU WIN 
+0

Das nicht. Nach dem Zufallsprinzip arbeiten, manchmal habe ich Toast spawn und manchmal, wenn ich 3 gleiche Wert bekam, bekam nichts – Rodriquez

+0

können Sie bitte Ihre getestete Integer-Liste teilen? – FAT

+0

Bitte lesen Sie den bearbeiteten Post. – Rodriquez

Verwandte Themen