Je dois séparer et compter combien de valeurs dans arraylist sont identiques et les imprimer en fonction du nombre d'occurrences.
J'ai un auteur appelé digits:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
J'ai créé une méthode qui sépare chaque valeur et l'enregistre dans un nouveau tableau.
public static ArrayList<Integer> myNumbers(int z) {
ArrayList<Integer> digits = new ArrayList<Integer>();
String number = String.valueOf(z);
for (int a = 0; a < number.length(); a++) {
int j = Character.digit(number.charAt(a), 10);
digits.add(j);
}
return digits;
}
Après cela, j'ai un nouveau tableau appelé nombres. J'utilise une sorte sur ce tableau
Collections.sort(numbers);
et mon ArrayList ressemble à ceci:
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9]
Il a:
2 times 0;
9 times 1;
4 times 2;
6 times 3;
5 times 4;
6 times 5;
5 times 6;
5 times 7;
5 times 8;
3 times 9;
J'ai besoin d'imprimer la chaîne de nombres qui dépend de combien ils sontAlors supposons qu'ils ressemblent à ceci: 1354678290
En utilisant l'API Stream par exemple.
package tests;
import org.junit.Assert;
import org.junit.Test;
import Java.util.Arrays;
import Java.util.List;
import Java.util.Map;
import Java.util.function.Function;
import Java.util.stream.Collectors;
public class Duplicates {
@Test
public void duplicates() throws Exception {
List<Integer> items = Arrays.asList(1, 1, 2, 2, 2, 2);
Map<Integer, Long> result = items.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
Assert.assertEquals(Long.valueOf(2), result.get(1));
Assert.assertEquals(Long.valueOf(4), result.get(2));
}
}
utilisez la méthode Collections.frequency pour compter les doublons
Eh bien, pour cela, vous pouvez essayer d’utiliser Map
Map<Integer, Integer> countMap = new HashMap<>();
for (Integer item: yourArrayList) {
if (countMap.containsKey(item))
countMap.put(item, countMap.get(item) + 1);
else
countMap.put(item, 1);
}
Après la fin de chaque boucle, vous aurez une carte remplie avec vos éléments.
La question est de compter combien il y a de deux ou trois dans un tableau . En Java 7, la solution est:
import Java.util.Arrays;
import Java.util.HashMap;
import Java.util.HashSet;
import Java.util.List;
import Java.util.Map;
import Java.util.Set;
public class howMany1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765);
Map<Integer ,Integer> map = new HashMap<>();
for( Integer r : list) {
if( map.containsKey(r) ) {
map.put(r, map.get(r) + 1);
}//if
else {
map.put(r, 1);
}
}//for
//iterate
Set< Map.Entry<Integer ,Integer> > entrySet = map.entrySet();
for( Map.Entry<Integer ,Integer> entry : entrySet ) {
System.out.printf( "%s : %d %n " , entry.getKey(),entry.getValue() );
}//for
}}
En Java 8, la solution au problème est la suivante:
import Java.util.Arrays;
import Java.util.HashMap;
import Java.util.HashSet;
import Java.util.List;
import Java.util.Map;
import Java.util.Set;
import Java.util.stream.Collectors;
public class howMany2 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765);
// we can also use Function.identity() instead of c->c
Map<Integer ,Long > map = list.stream()
.collect( Collectors.groupingBy(c ->c , Collectors.counting()) ) ;
map.forEach( (k , v ) -> System.out.println( k + " : "+ v ) );
}}
Une autre méthode consiste à utiliser Collections.frequency. La solution est:
import Java.util.Arrays;
import Java.util.Collections;
import Java.util.HashSet;
import Java.util.List;
import Java.util.Set;
public class Duplicates1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 1, 2, 3, 5, 8, 13,13, 21, 34, 55, 89, 144, 233);
System.out.println("Count all with frequency");
Set<Integer> set = new HashSet<Integer>(list);
for (Integer r : set) {
System.out.println(r + ": " + Collections.frequency(list, r));
}
}}
Une autre méthode consiste à modifier le tableau int en Liste entière à l'aide de la méthode => Arrays.stream (tableau) .boxed (). Collect (Collectors.toList ()), puis à obtenir l'entier à l'aide de la boucle for.
public class t7 {
public static void main(String[] args) {
int[] a = { 1, 1, 2, 3, 5, 8, 13, 13 };
List<Integer> list = Arrays.stream(a).boxed().collect(Collectors.toList());
for (Integer ch : list) {
System.out.println(ch + " : " + Collections.frequency(list, ch));
}
}// main
}
Utilisez la fonction ci-dessous pour compter les éléments en double:
public void countDuplicate(){
try {
Set<String> set = new HashSet<>(original_array);
ArrayList<String> temp_array = new ArrayList<>();
temp_array.addAll(set);
for (int i = 0 ; i < temp_array.size() ; i++){
Log.e(temp_array.get(i),"=>"+Collections.frequency(original_array,temp_array.get(i)));
}
}catch (Exception e){
e.printStackTrace();
}
}
Java 8, the solution: 1. Create Map when the Key is the Value of Array and Value is counter.
2. Check if Map contains the Key increase counter or add a new set.
private static void calculateDublicateValues(int[] array) {
//key is value of array, value is counter
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer element : array) {
if (map.containsKey(element)) {
map.put(element, map.get(element) + 1); // increase counter if contains
} else
map.put(element, 1);
}
map.forEach((k, v) -> {
if (v > 1)
System.out.println("The element " + k + " duplicated " + v + " times");
});
}
Vous pouvez compter le nombre d'éléments dupliqués dans une liste en ajoutant tous les éléments de la liste et en le stockant dans un hachage. Une fois que cela est fait, il vous suffit de connaître la différence entre la taille du hachage et celle de la liste.
ArrayList<String> al = new ArrayList<String>();
al.add("Santosh");
al.add("Saket");
al.add("Saket");
al.add("Shyam");
al.add("Santosh");
al.add("Shyam");
al.add("Santosh");
al.add("Santosh");
HashSet<String> hs = new HashSet<String>();
hs.addAll(al);
int totalDuplicates =al.size() - hs.size();
System.out.println(totalDuplicates);
Faites-moi savoir si cela nécessite plus de clarification