Estoy almacenando puntuaciones en una ArrayList , pero cuando el usuario tiene una puntuación igual a una puntuación anterior, la segunda no se agrega a la ArrayList. ¿Cómo puedo agregar valores iguales a una ArrayList (o usar otro tipo de Lista)?
Código:
[...] ArrayList<String> savedArray = new ArrayList<>(); Set<String> gandula = new HashSet<>(); [...] public Preferencias(Context contextoParametro) { contexto = contextoParametro; preferences = contexto.getSharedPreferences(NOME_ARQUIVO, MODE); editor = preferences.edit(); } public void addMediaGeral(double mediaGeral) { //Save Score Set<String> set = new HashSet<String>(); if (!getMediaGeral().get(0).equals("0")) { savedArray.addAll(getMediaGeral()); } savedArray.add(String.valueOf(mediaGeral)); set.addAll(savedArray); editor.putStringSet(KEY_MEDIA_GERAL, set); editor.commit(); } public ArrayList<String> getMediaGeral(){ //get score Set<String> set = preferences.getStringSet(KEY_MEDIA_GERAL, gandula); ArrayList<String> list = new ArrayList<String>(set); return list; } [...]Recuperando en mi actividad:
[...] mediaGeral = score; preferencias.addMediaGeral(Double.parseDouble(mediaGeral)); [...] ArrayList<String> string_medias = new ArrayList<>(); string_medias = preferencias.getMediaGeral(); ArrayList<Float> float_medias = new ArrayList<>(); for (int j = 0; j < string_medias.size(); j++){ float_medias.add(Float.parseFloat(string_medias.get(j))); } Log.i("TESTANDO PRF", "TAMANHO DA LISTA: "+float_medias.size()); Float[] dataObjects = float_medias.toArray(new Float[float_medias.size()]); doChart(float_medias); [...]Obtuve 0.33333 tres veces (configuraré decimales) pero solo muestra una puntuación de 0.3333.
Pantalla de impresión: http://prntscr.com/f1vx3h
Pero el gráfico acepta duplicados. Printscreen: http://prntscr.com/f1vxng (manipulé las puntuaciones en la última printscreen).
ArrayList acepta duplicados, este no debería ser su problema, pero vi que su puntaje de tienda en un HashSet usa un hashMap porque:
En el caso de HashMap, reemplaza el valor anterior por el nuevo.
En el caso de HashSet, el elemento no se inserta.
Un conjunto no permite valores duplicados.
Haciendo esto:
set.addAll(savedArray);descarta todos sus duplicados.
Estas respuestas pueden ser de ayuda.
Guardar un objeto JSON como una cadena en las preferencias probablemente sea el camino a seguir.