5377037:
Tengo un conjunto de datos de la siguiente manera:
1,JOHN,1934
2,TERENCE,1914
3,JOHN,1964
4,JOHN,1904
5,JOHN,1924
6,JOHN,1954
7,JOHN,1944
8,JOHN,1984
9,JOHN,1974
10,JOHN,1994
¿Qué he cargado en ArrayList de String[]
desde un archivo de texto como este:
ArrayList<String[]> records = new ArrayList<>();
String fileLocation = System.getProperty("user.dir");
String dataPath = fileLocation + File.separator + "boys-names.txt";
try {
try (BufferedReader br = new BufferedReader(new FileReader(dataPath))) {
String line;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
records.add(values);
}
}
} catch (IOException e) {
e.printStackTrace();
}
Quería ordenar conjunto de datos en el aumento de años de esta manera:
4,JOHN,1904
2,TERENCE,1914
5,JOHN,1924
1,JOHN,1934
7,JOHN,1944
6,JOHN,1954
3,JOHN,1964
9,JOHN,1974
8,JOHN,1984
10,JOHN,1994
Problema: El built-in método de clasificación Collections.sort(list);
de ArrayList sólo funciona con sencillo en el tipo de datos. Pero, en mi caso tengo cadena con multi-tipo (cadena-entero) y la clasificación debe basar en números enteros . Así que, ¿hay alguna manera de resolver este problema?
Consorcio inactivo :
Mediante el uso de java-8 expresión lambda, escritura personalizado Comparator
que compara Integer
los valores y su uso Integer.valueOf
para la conversión String
aInteger
List<String[]> list = new ArrayList<String[]>();
String[] ar1 = {"1","JOHN","1934"};
String[] ar2 = {"2","TERENCE","1914"};
list.add(ar1);
list.add(ar2);
list.sort((c1,c2)->Integer.valueOf(c1[2]).compareTo(Integer.valueOf(c2[2])));
list.forEach(i->System.out.println(Arrays.toString(i)));
Salida
[2, TERENCE, 1914]
[1, JOHN, 1934]