Soy una cadena para reemplazar una cadena en una columna ArrayList. Obtengo un error en la expresión

Bad return type in lambda expression: String cannot be converted to Articles

articlesArrayList.replaceAll(articles -> articles.getAuthor().replace("."," "));
-2
Ambi 23 ago. 2020 a las 18:48

2 respuestas

La mejor respuesta

El método replaceAll está intentando devolver una serie de artículos. En su lugar, su mapa de funciones devuelve una cadena. Si desea reemplazar el '.' carácter con "" para cada autor, utilice el método ArrayList.forEach en su lugar.

1
user3533862 23 ago. 2020 a las 15:51
class Main {
    public static void main(String[] args) {
        new Main().replace();
    }

    public void replace() {
        List<Article> articlesArrayList = new ArrayList<>();
        articlesArrayList.add(Article.builder().author("Sagar.Gangwal").build());
        articlesArrayList.stream().forEach(article -> article.getAuthor().replaceAll(".", " "));

        articlesArrayList = articlesArrayList.stream()
                .map(a -> this.update(a)).collect(Collectors.toList());
        System.out.println(articlesArrayList.get(0));
    }

    private static Article update(Article a) {
        a.author = a.getAuthor().replaceAll("\\.", " ");
        return a;
    }
}

Puede ver el código anterior.

Aquí estoy tratando de crear una transmisión y luego para cada elemento de esa transmisión quiero actualizar AuthorName con '.' Al espacio.

articlesArrayList.stream().map(a -> this.update(a)).collect(Collectors.toList());

Debe usar la API de transmisión y luego el método de actualización personalizado para actualizar el valor.

Además, para reemplazar '.' , también debe usar el carácter de escape. El método replaceAll de la clase String contiene el primer argumento como regular expression .

Si ve esto, estoy escapando '.' con '\\.' . a.getAuthor().replaceAll("\\.", " ");

Entonces, en lugar de replaceAll , puede optar por el método de reemplazo que simplemente toma el primer argumento como simplemente reemplazar un carácter con el carácter de destino pasado.

Puede ver la diferencia entre replace and replaceAll.

0
Sagar Gangwal 23 ago. 2020 a las 16:09
63548969