Java - Dar formato al toString de un arraylist

   
Vista:

Dar formato al toString de un arraylist

Publicado por Tomas (65 intervenciones) el 21/02/2016 19:01:01
Hola, tengo un ArrayList<Double> y necesito que me imprima todos sus valores pero con 1 decimal.
myArrayList.toString(); --> me los imprime con mas de 10 decimales
¿Hay alguna manera que sea con 1?
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

Dar formato al toString de un arraylist

Publicado por Thanatos (69 intervenciones) el 22/02/2016 09:56:14
Me parece que lo mejor sería escribir un método que recorra el ArrayList, mostrando los valores uno a uno con el el formato que necesitas.

El método System.out.printf(), con el especificador de formato %.1f, dentro de un bucle for que recorra el ArrayList, sería suficiente para mostrar los números tipo double con una cifra decimal.


Si estás usando Java 8, el código del método se puede reducir a algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.ArrayList;
import java.util.List;
 
class Ejemplo1 {
 
    public static void main(String[] args) {
        ArrayList<Double> lista = new ArrayList<>();
        lista.add(3.1415926536);
        lista.add(2.7182818285);
        lista.add(0.5772156649);
        lista.add(2344.3599);
 
        mostrarElementos(lista);
    }
 
    private static void mostrarElementos(List<?> lista) {
        lista.forEach(
            elemento -> System.out.print(String.format("%.1f  ", elemento))
        );
    }
 
}



Si realmente quieres utilizar toString() para mostrar los elementos del ArrayList, podrías crear una clase que extienda la funcionalidad de ArrayList, y en ella hacer un @Override del método toString(). Por ejemplo:

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
import java.text.DecimalFormatSymbols;
import java.text.DecimalFormat;
import java.util.ArrayList;
 
public class MiArrayList<T> extends ArrayList<T> {
    private static final long serialVersionUID = -5515705519160354691L;
 
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
 
        DecimalFormatSymbols simbolos = new DecimalFormatSymbols();
        simbolos.setDecimalSeparator('.');
 
        DecimalFormat miFormato = new DecimalFormat("#.#", simbolos);
        miFormato.setMaximumFractionDigits(1);
 
        sb.append("[");
        for (int i = 0; i < this.size(); ++i) {
            sb.append(miFormato.format(this.get(i)));
            if (i < this.size() - 1) {
                sb.append(", ");
            }
        }
        sb.append("]");
 
        return sb.toString();
    }
 
}

Luego tendrías que utilizar objetos de tipo MiArrayList, en lugar de los ArrayList, para usar el método toString() que tiene el nuevo formato.

1
2
3
4
5
6
7
8
9
10
11
12
13
class Ejemplo2 {
 
    public static void main(String[] args) {
        MiArrayList<Double> lista = new MiArrayList<>();
        lista.add(3.1415926536);
        lista.add(2.7182818285);
        lista.add(0.5772156649);
        lista.add(2344.3599);
 
        System.out.printf(lista.toString());
    }
 
}
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

Dar formato al toString de un arraylist

Publicado por Wasp (14 intervenciones) el 22/02/2016 11:40:59
Buenas Thanatos, una pregunta,

¿la clase MiArrayList de donde sale, y de quien hereda?

Comentas que tiene un nuevo formato el toString(), pero busco por google y no la encuentro
¿serías tan amable de mostrar la dirección para poder ver sus métodos o en la api de Java?

Muchas gracias.
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

Dar formato al toString de un arraylist

Publicado por Tomas (65 intervenciones) el 24/02/2016 22:32:19
MiArrayList hace referencia al nombre que tú le quiras poner a la clase. Hereda de ArrayList.
<T> es el tipo de dato con el que la vas a usar (puede ser otra clase hecha por ti, o tipos normales : Integer, Double(en mi caso) etc).
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

Dar formato al toString de un arraylist

Publicado por Tomas (65 intervenciones) el 24/02/2016 22:53:29
Probé el primer ejemplo, pero no me di cuenta de que es un ArrayList bidimensional ( ArrayList<tipo>[ ] ) es decir un ArrayList de arrais. Se me complicó mucho. Gracias igualmente.
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