únicos valores unicos una matricial lista hacer fórmula extraer dinámica dinamica desplegable con como celda asignar java arraylist

java - una - valores unicos lista desplegable dinamica en celda con formula matricial



Crear un listado de valores únicos (10)

Tengo, en Java, una lista de arrays con esos valores (muchas líneas, esto es solo un extracto)

20/03/2013 23:31:46 6870 6810 6800 6720 6860 6670 6700 6650 6750 6830 34864 34272 20/03/2013 23:31:46 6910 6780 6800 6720 6860 6680 6620 6690 6760 6790 35072 34496

Donde los dos primeros valores son cadenas que contienen datos y se almacenan en un solo elemento.

Lo que quiero hacer es comparar los elementos de datos de cadena y eliminar, por ejemplo, el segundo y todos los elementos referidos a esa línea.

Por ahora, he usado un ciclo para que cada 13 elementos compara la cadena (para comparar solo cadenas de datos)

Mi pregunta: ¿puedo implementar otras mejores soluciones?

Este es mi código:

import java.util.Scanner; import java.util.List; import java.util.ArrayList; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; public class Downsampler { public static void main(String[] args) throws Exception{ //The input file Scanner s = new Scanner(new File("prova.txt")); //Saving each element of the input file in an arraylist ArrayList<String> list = new ArrayList<String>(); while (s.hasNext()){ list.add(s.next()); } s.close(); //Arraylist to save modified values ArrayList<String> ds = new ArrayList<String>(); // int i; for(i=0; i<=list.size()-13; i=i+14){ //combining the first to values to obtain data String str = list.get(i)+" "+list.get(i+1); ds.add(str); //add all the other values to arraylist ds int j; for(j=2; j<14; j++){ ds.add(list.get(i+j)); } //comparing data values int k; for(k=0; k<=ds.size()-12; k=k+13){ ds.get(k); //first data string element //Comparing with other strings and delete //TODO } } } }


Crear un listado de valores únicos

Podría usar el método Set.toArray() .

Una colección que no contiene elementos duplicados. Más formalmente, los conjuntos no contienen ningún par de elementos e1 y e2 tales como e1.equals (e2), y como máximo un elemento nulo. Tal como lo implica su nombre, esta interfaz modela la abstracción del conjunto matemático.

http://docs.oracle.com/javase/6/docs/api/java/util/Set.html


Intente buscar duplicados con un método .contains() en ArrayList, antes de agregar un nuevo elemento.

Se vería algo como esto

if(!list.contains(data)) list.add(data);

Eso debería evitar duplicados en la lista, así como no estropear el orden de los elementos , como las personas parecen buscar.


Podrías usar un Set. Es una colección que no acepta duplicados.


Puede leer de un archivo a un mapa, donde la clave es la fecha y omitir si toda la fila si la fecha ya está en el mapa

Map<String, List<String>> map = new HashMap<String, List<String>>(); int i = 0; String lastData = null; while (s.hasNext()) { String str = s.next(); if (i % 13 == 0) { if (map.containsKey(str)) { //skip the whole row lastData = null; } else { lastData = str; map.put(lastData, new ArrayList<String>()); } } else if (lastData != null) { map.get(lastData).add(str); } i++; }


Si necesita valores únicos, debe usar la implementación de la interfaz SET


Simplemente anule el método boolean equals () de objeto personalizado. Supongamos que tiene una ArrayList con campo personalizado f1, f2, ... anulación

@Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof CustomObject)) return false; CustomObject object = (CustomObject) o; if (!f1.equals(object.dob)) return false; if (!f2.equals(object.fullName)) return false; ... return true; }

y verificar usando el método contains () de la instancia ArrayList. Eso es.


Usar Set

... Set<String> list = new HashSet<>(); while (s.hasNext()){ list.add(s.next()); } ...


Usted puede hacer esto fácilmente con un Hashmap . Obviamente tiene una clave (que es la cadena de datos) y algunos valores.

Haz un bucle en todas tus líneas y agrégalas a tu mapa.

Map<String, List<Integer>> map = new HashMap<>(); ... while (s.hasNext()){ String stringData = ... List<Integer> values = ... map.put(stringData,values); }

Tenga en cuenta que en este caso, mantendrá la última ocurrencia de líneas duplicadas. Si prefiere mantener la primera ocurrencia y eliminar las otras, puede agregar una Map.containsKey(String stringData); con Map.containsKey(String stringData); antes de poner en el mapa.


//Saving each element of the input file in an arraylist ArrayList<String> list = new ArrayList<String>(); while (s.hasNext()){ list.add(s.next()); } //That''s all you need list = (ArrayList) list.stream().distinct().collect(Collectors.toList());


HashSet hs = new HashSet(); hs.addAll(arrayList); arrayList.clear(); arrayList.addAll(hs);