Zamiana Google Function na lambdy

0

Hej. Czy da się to uprościć korzystając z Javy 8 i lambd. Mam do zapisania listę (niedużą) do pliku we własnym formacie ( jeden obiekt - jedna linijka ) i teraz mam tak ;.

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import com.google.common.collect.Lists;

class Book {
    private String title;

    Book(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }
}

class bookToFileLine implements com.google.common.base.Function<Book,String> {
    @Override
    public String apply(Book book) {
        return "Title["+book.getTitle()+"]";
    }
}

public class Main {
    public static void main(String[] args) {
        List<Book> books = Arrays.asList(
                new Book("ABC"),
                new Book("CDE"),
                new Book("EFG")
        );
        List<String> fileLines = Lists.transform(books,new bookToFileLine());
        try {
            Files.write(Paths.get("test.txt"),fileLines,Charset.defaultCharset());
        } catch (IOException io) {
            io.printStackTrace();
        }
    }
}
1

Wydaje mi się, że dobre IDE powinno samo zamienić na lambdy. Najpierw jednak wklej ciało klasy bookToFileLine w miejscu gdzie tworzysz instancję (tzn zrób z niej klasę anonimową).

No chyba, że chcesz całkiem się pozbyć Googleowej biblioteki, wtedy poczytaj tutki o Javie 8 :)

0

dobra mam Ctrl - Shift - Space ;] . @Wibowit chce żeby było krótko i prosto. Guavowego odpowiednika do tego w Java8 nie znalazłam

1
books.stream().map(cośtam).collect(cośtam);
3
List<String> fileLines = books.stream().map(book -> "Title[" + book.getTitle() + "]").collect(Collectors.toList());

Ale można to zrobić trochę szybciej:

        Iterable<String> it = books.stream().map(book -> "Title[" + book.getTitle() + "]")::iterator;
        try {
            Files.write(Paths.get("test.txt"),it,Charset.defaultCharset());
        } catch (IOException io) {
            io.printStackTrace();
        }

Bo nie ma sensu budować listy z tego strumienia ;)

0

tak tak:

List<String> fileLines = Lists.transform(books, b -> "Title[" + b.getTitle() + "]");
//lub
List<String> fileLines = books.stream().map(b -> "Title[" + b.getTitle() + "]").collect(Collectors.toList());

ale z Guavy i tak nie mogę zrezygnować, no ale problem rozwiązany dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1