La comparación de dos ArrayLists de CSV

Leemi:

Tengo una pregunta general:

¿Cuál sería la mejor manera de ordenar dos ArrayLists en base a los valores de los demás si:

(1) cada arrayList contiene exactamente una columna de la CSV importado (a través de flujoEntrada y bufferReader (en aras de la sencillez, no voy a imprimir esto más adelante).

//my arrayLists:

List <String> OpenVal = new Arraylist ();
List <String> CloseVal = new Arraylist();


//lists from above contain column 0 and 1 from CSV:
while((reader.readLine()) != null) {

Sting line = "";
String ColTwo [] = line.split(",");
openVal.add(colOne[1]);
closVal.add(colOne[2]);

(2) para una mayor claridad, cada columna de la CSV [colone [1], colone [2] contienen la siguiente información:

//colOne [1]  colOne [2]
   date        value
   friday       32
   tues         21
   wed          5

(3) La forma en que lo haría para ordenar que sería como este (por valor):

//colOne [1]  colOne [2]
   date        value
   wed          5
   tues         21
   friday       32

(4) No me parece una clase comparador sea eficiente, ya que no es necesario que la información de escritura en el constructor de la ArrayList. La lista es prefijado por la CSV.

(3) ¿Cómo sería la mejor manera de comparar las dos listas?

Eritrea:

Si su csv contiene sólo una fila por fecha podría almacenar sus datos para mapear en lugar de la lista:

Map<String,Integer> myMap = new HashMap<>();
String line;
while((line = reader.readLine()) != null) {
    myMap.put(line.split(",")[0], Integer.parseInt(line.split(",")[1]));
}

Después se puede clasificar su mapa:

Map<String,Integer> sorted = myMap.entrySet().stream().
                             sorted(Map.Entry.comparingByValue()).
                             collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(e1, e2) -> e1,LinkedHashMap::new));

y para imprimir el mapa Ordenado:

sorted.entrySet().forEach(System.out::println);

O como han comentado en DodgyCodeException leer sus líneas a List<String[]>:

List<String[]> myList = new ArrayList<>();
    String line = "";
    while((line = reader.readLine()) != null) {
        myList.add(line.split(","));
}

y para ordenar:

    Collections.sort(myList, new Comparator<String[]>() {
        @Override
        public int compare(String[] o1, String[] o2) {
            return Integer.compare(Integer.parseInt(o1[1]), Integer.parseInt(o2[1]));
        }
    });

Y, finalmente, para imprimir su lista sólo tiene que utilizar un bucle, por ejemplo:

for(String[] row : myList){
    System.out.println(row[0] +" : "+ row[1])
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=189144&siteId=1
Recomendado
Clasificación