Java - string que mas aparece

 
Vista:

string que mas aparece

Publicado por marcos (1 intervención) el 04/07/2020 11:40:20
buenos dias, una consulta... si tengo por ejemplo...
1
String [] frutas ={"pera","banana","pera","manzana"}

como hacer una funcion que me retorne la palabra q mas se repite ? :T
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
Imágen de perfil de Rodrigo
Val: 1.591
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

string que mas aparece

Publicado por Rodrigo (421 intervenciones) el 04/07/2020 14:40:20
Ideas:

- Inicia un contadorMaximo en 0, y una posicionMaximo en 0
- Recorre el arreglo de string y por cada iteracion
- Inicia un contador en 1
- Recorres el arreglo otra vez (anidado al otro) pero desde la posicion siguiente a la actual hasta el final
- Comparas si el string que se ve en este segundo ciclo es igual al del primer ciclo.
- Si es, aumenta el contador en uno mas.
- Si al final de recorrer con el segundo ciclo, pero antes de salir del primero, el contador es mayor que el contadorMaximo, actualiza el contadorMaximo con el contador del segundo string y el indice del maximo (posicionMaximo)
- Al final del primer ciclo tendras el mayor en la variable posicionMaximo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 1.996
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

string que mas aparece

Publicado por Billy Joel (576 intervenciones) el 04/07/2020 21:18:36
Se me ocurre algo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * Devuelve la palabra mas repetida dentro del arreglo words
 *
 * @param words
 * @return
 */
public String getMasRepetida(String[] words) {
    Map<String, Integer> m = new HashMap();
    for (String w : words) {
        m.put(w, m.containsKey(w) ? m.get(w) + 1 : 1);
    }
    String max = words[0];
    //Recorremos el mapa en busqueda del valor mas alto
    for (Map.Entry<String, Integer> e : m.entrySet()) {
        if (e.getValue() > m.get(max)) {
            max = e.getKey();
        }
    }
    return max;
}

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

string que mas aparece

Publicado por Tom (1610 intervenciones) el 06/07/2020 12:33:21
Y la solución de Billy, en java8 ...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class StringCount {
	static String test[] = {"test0", "test1", "test3", "test1", "test3", "test4", "test3"};
 
	/* */
	public static void main(String args[]) {
		Map<String, Integer> smap = new HashMap<>();
		for(String s : test) {
			smap.merge(s, 1, (v1, v2) -> v1 + 1);
		}
		Map.Entry me = smap.entrySet().stream().max(Map.Entry.comparingByValue()).orElse(null);
		if(me != null) {
			System.out.printf("Max: %s -> %d\n", me.getKey(), me.getValue());
		}
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Franklin
Val: 649
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

string que mas aparece

Publicado por Franklin (176 intervenciones) el 06/07/2020 14:15:06
Olle Tom una consulta. entiendo mas o menos el funcionamiento del código aunque no tengo mucha prácitca con HashMap.
lo que mas me confunde es el metodo mergue(). y aunque he leido un poco no termino de entender.

smap.merge(s, 1, (v1, v2) -> v1 + 1); podrías explicarme como se lee o interpreta esa linea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

string que mas aparece

Publicado por Tom (1610 intervenciones) el 06/07/2020 15:00:01
Está razonablemente bien descrito en la doc del JDK.
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#merge-K-V-java.util.function.BiFunction-
https://docs.oracle.com/javase/8/docs/api/java/util/function/BiFunction.html

En traducción libre, si la clave "key" no existe, se inserta en el Map junto con el "value". En caso de que ya exista, o su valor asociado sea no nulo se modifica su valor, asignando el devuelto por "remappingFunction").

Esta remappingFunction recibe el valor actual en el Map, y el valor indicado en merge. En mi ejemplo, se limita a sumar 1 al valor ya existente.

Si te refieres a la sintaxis, (v1, v2) -> v1 + 1 es un lambda, hay más formas de escribirlo. Es lo mismo que instanciar un objeto BiFunction y pasarlo a merge.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Franklin
Val: 649
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

string que mas aparece

Publicado por Franklin (176 intervenciones) el 06/07/2020 17:20:52
leeré la documentación aunque mi duda creo que va exactamente hacia:
smap.merge(s, 1, (v1, v2) -> v1 + 1);

donde:
s es el String tomando del array
1 es un 1
(v1, v2) esto no lo entiendo, y por ultimo el lambda llego a entenderlo pero no cada parametro del verge o como se comporta.

respecto a Map.Entry me = smap.entrySet().stream().max(Map.Entry.comparingByValue()).orElse(null);

creo que se entiende con facilidad solo con leerlo.

igual gracias por el enlace.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 1.996
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

string que mas aparece

Publicado por Billy Joel (576 intervenciones) el 06/07/2020 21:22:25
Gracias Tom, entre las variantes de Map (LinkedMap, SortedMap, TreeMap, etc...) me imaginaba que había alguna forma de herlo en una línea.

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar