Sí, una pregunta trivial, pero no encontró un duplicado. Por el momento, a partir de esta colección (ArrayList):
Java
C#
Java
Python
Debo sale esto: (es decir, sobre cada palabra será el número de duplicados encontrados)
Java 2
C# 1
Java 2
Python 1
Por el momento estoy usando mapa, pero elimina los duplicados y eso es lo que me pasa.
Java 2
C# 1
Python 1
Aquí está mi código:
Map<String, Integer> map = new HashMap<>();
for (String temp : array) {
Integer count = map.get(temp);
if (count != null){
map.put(temp, count + 1);
}
else {
map.put(temp, 1);
}
}
Tenía una idea para escribir datos a otra lista, que pasar por esta lista comparando cada elemento de la lista de "padre" con todos los elementos de la nueva lista. Algo como eso:
List<String> resultList = new ArrayList<>();
List<String> mainList = new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
mainList.add(i,arrayList.get(i));
}
for (int i = 0; i < mainList.size(); i++) {
int x = 1;
for (String anArray : arrayList) {
if (mainList.get(i).equals(anArray)) {
resultList.add(i,mainList.get(i) + " "+ x++);
}
}
}
resultList.forEach(System.out::println);
Que funciona como que necesito, sino que también crea una línea adicional cuando encuentra un duplicado.
Java 2
C# 1
Java 2
Python 1
Java 1
Java 1
En la puesta en práctica con la lista, tengo el problema de que aumenta el elemento actual por 1, sino que también crea otro al mismo tiempo.
Chicos, voy a ser feliz con cualquier idea o pista que me guiará a la solución de mi problema!
UPD: Todas las respuestas a esta pregunta son divinos. ¡Gracias chicos! Me siento raro tratando de elegir la respuesta correcta sin ofender a los demás.
Se puede utilizar Collections.frequency
al iterar la lista para imprimir el número de ocurrencias de cada palabra de la lista:
public static void main(String[] args) {
List<String> list = Arrays.asList("Java", "C#", "Java", "Python");
list.forEach( s -> System.out.println(s + " " + Collections.frequency(list, s)));
}
Salida:
Java 2
C# 1
Java 2
Python 1