Java - Ordenar un ArrayList de Sting en base a numeros

 
Vista:

Ordenar un ArrayList de Sting en base a numeros

Publicado por Roberta (2 intervenciones) el 08/12/2019 14:19:43
Tengo un pequeño problema, no sabría cómo ordenar una lista de Strings. No quiero ordenarlo alfabéticamente, quiero ordenarlo de mayor a menor o de menor a mayor.
1
2
3
4
5
6
7
8
String line = "hello" + "world" + "54";
String line1 = "red" + "color" + "895";
String line2 = "blue" + "color" + "98";
String line3 = "pink" + "color" + "802";
lis.add(line);
lis.add(line1);
lis.add(line2);
lis.add(line3);
y la salida:
hello world 54
blue color 98
pink color 802
red color 895
y obtener la última línea con el elemento más grande, en este caso: color rojo 895
Para esto pensé en usar un for, pero no se como podría ponerlo.
Y una vez que consigas la línea, solo puedes imprimir la primera palabra.

red color 895 .

resultado : red
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ordenar un ArrayList de Sting en base a numeros

Publicado por Kabuto (1381 intervenciones) el 09/12/2019 00:09:47
Hola.
Tal cuál tienes escrito el código, en realidad tienes estas líneas:
helloworld54
bluecolor98
pinkcolor802
redcolor895

Es decir, no hay espacios que separen las tres partes y por tanto el programa nunca va a saber donde termina una palabra y empieza la otra.
Si queremos poder distinguir las tres partes que compone cada línea, tenemos que añadir los espacios en blanco:

1
2
3
4
String line = "hello " + "world " + "54";
String line1 = "red " + "color " + "895";
String line2 = "blue " + "color " + "98";
String line3 = "pink " + "color " + "802";

De hecho, ese código es exactamente lo mismo que si escribimos esto:
1
2
3
4
String line = "hello world 54";
String line1 = "red color 895";
String line2 = "blue color 98";
String line3 = "pink color 802";


Bien, ahora que tenemos espacios en blanco separando las partes de cada línea, podemos valernos del método split() de la clase String.
Este método coge una línea y la separa en partes a partir del valor que le indiquemos.
Si para estas líneas le indicamos el valor espacio en blanco --> " "
entonces dividirá la linea en tres partes y nos las devuelve en un array de tipo String. El último elemento de este array, la posición [2], contendría el valor numérico de la línea. Pues podemos cogerlo, parsearlo a un valor Integer y así poder comparar los valores numéricos para poder ordenar el listado de líneas.

Mira, te pongo este código a ver si así se entiende mejor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Comparar {
 
	public static void main(String[] args) {
 
		ArrayList<String> lis = new ArrayList<String>();
		lis.add("hello world 54");
		lis.add("red color 895");
		lis.add("blue color 98");
		lis.add("pink color 802");
 
		//Ordenamos según el valor numérico de cada línea
		for (int i = 1; i < lis.size(); ++i)
			for (int j = 0; (j < lis.size()-i); j++) {
				/*
				 * Haciendo split() por el caracter espacio
				 * obtenemos un array de String con las tres partes de la linea.
				 * La tercera parte, posicion [2] contiene el valor numérico.
				 */
				String[] lineaActual = lis.get(j).split(" ");
				String[] lineaPosterior = lis.get(j+1).split(" ");
				if (Integer.parseInt(lineaActual[2]) > Integer.parseInt(lineaPosterior[2])) {
					String aux = lis.get(j);
					lis.set(j, lis.get(j + 1));
					lis.set(j+1, aux);
				}
			}
 
		System.out.println("Lista ordenada de menor a mayor:");
		for (String linea: lis)
			System.out.println(linea);
	}
 
}

Al ejecutar, podemos ver en pantalla que las líneas se han ordenado correctamente:
1
2
3
4
5
Lista ordenada de menor a mayor:
hello world 54
blue color 98
pink color 802
red color 895

Pues a partir de este código, ya sabes como ordenar y como obtener las partes de la línea que deseamos
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