comparar las fechas de una cadena en la lista

RM. :

Estoy teniendo un problema continuo. Tengo una lista y en cada posición contiene una cadena (dentro de la frase no se encuentra al final de una fecha)

Ejemplo:

I am new here 20/8/2019 

Quiero ordenar la lista de la siguiente manera: En la posición cero Quiero la frase que contiene la fecha más antigua y las siguientes posiciones de la fecha es más reciente.

He intentado utilizar SimpleDateFormat y fecha, pero no sabía cómo hacerlo.

String variable, variable2, c;
int d = 0;
for(int i = 0; i < lista.size(); i++) {
    for(int j = 1; j <lista.size(); j++) {
        variable = lista.get(i);
        variable2 = lista.get(j);
        c = compareDates(variable, variable2);
        lista.add(d,c);
        d++;
    }
}

private static Date compareDates(String variable, String variable2) throws ParseException {
    SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yyyy");
    String var = formateador.format(variable);
    String var2 = formateador.format(variable2);
    if (var.before(var2)) {
        return var;
    } else {
        if (var2.before(var1)) {

        } else {

        }
        return null;
    }
}

Excepción en el hilo "principal" java.lang.Error: no resuelto problema de compilación: tipo incorrecto: no se puede convertir de Fecha de cuerdas

at Ejercicio.ClaseMain.leerDes(ClaseMain.java:124)

Línea 124: c = compareDates (variable, variable2);

Visual ejemplo: Cada posición en la lista tiene una frase con una fecha:

introducir descripción de la imagen aquí

La cosa es, he leído un archivo .txt, donde hay varias líneas. Contenido del archivo:

él mismo a Sevilla reservas Apoel y gana sin brillo; deporte Julen Lopetegui revolucionó el once con el objetivo de dar descanso a los habituales, lo que no impidió su equipo de sumar su segundo triunfo de la competencia sportYou 10/10/2019

Una pintura de Banksy del Parlamento británico ocupada por los chimpancés, que se vende> de 11 millones de euros la cultura Un aceite del artista Banksy en representación de la Cámara de los Comunes llena de chimpancés fue coronado el jueves en una subasta en Londres por 9,8 millones de libras (11 millones de euros ) 10/2019

Yo uso un tiempo para leer la línea de archivos y guardar cada línea en cada posición en la lista, y quiero ordenar la lista. Fecha de edad ---> fecha reciente.

VV Ole:

Mi solución sería la siguiente:

    List<String> lista = List.of(
            "Sevilla reserves himself to Apoel … sportyou 10/10/2019",
            "I am new here 20/8/2019",
            "A painting by Banksy … 19/10/2019");
    List<String> sortedList = lista.stream()
            .map(s -> new Object() {
                String theString = s;
                LocalDate date = extractDate(s);
            })
            .sorted(Comparator.comparing(obj -> obj.date))
            .map(obj -> obj.theString)
            .collect(Collectors.toList());
    sortedList.forEach(System.out::println);

La salida de este es:

I am new here 20/8/2019
Sevilla reserves himself to Apoel … sportyou 10/10/2019
A painting by Banksy … 19/10/2019

El extractDatemétodo que estoy usando es:

private static Pattern datePattern = Pattern.compile("\\d{1,2}/\\d{1,2}/\\d{4}$");
private static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");

private static LocalDate extractDate(String fullString) {
    Matcher m = datePattern.matcher(fullString);
    if (m.find()) {
        String dateString = m.group();
        return LocalDate.parse(dateString, dateFormatter);
    } else {
        throw new IllegalArgumentException("String doesn’t end with a date: " + fullString);
    }
}

Para la ordenación eficiente de las cadenas - sólo importa si hay muchos - Estoy extracción de la fecha de arrastre y analizar sólo una vez para cada cuerda (no para cada comparación). Estoy en el análisis sintáctico LocalDatey el uso de éstos para la clasificación. Con el fin de obtener las cadenas originales a cabo después de la clasificación que he puesto tanto el Stringy el LocalDateen un objeto y luego ordenar estos objetos. Puede sorprender a algunos que puedo usar una subclase anónima de Objectesta manera, pero funciona muy bien.

Te recomiendo que no utiliza SimpleDateFormaty Date. Estas clases están mal diseñados y largo obsoletos, en particular la primera notoriamente molesto. En vez estoy usando LocalDatey DateTimeFormatter, tanto desde java.time, la fecha moderna Java y API de tiempo.

Java tiene buenas instalaciones de clasificación incorporados. Si la escritura de su propio algoritmo de clasificación fue para un ejercicio, que es un buen ejercicio. Francamente que todavía tenía mucho camino por recorrer antes de que su clasificación funcionaría. Es posible que desee leer sobre algoritmos de clasificación, hay mucho escrito, también en la WWW. Para el código de producción que debe confiar en un método de biblioteca.

Enlace: Oracle tutorial: Fecha Hora que explica cómo utilizar java.time.

Supongo que te gusta

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