package org.adoptopenjdk.lambda.tutorial.exercise4;
/*
* #%L
* lambda-tutorial
* %%
* Copyright (C) 2013 Adopt OpenJDK
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/
import org.adoptopenjdk.lambda.tutorial.exercise4.Document.Page;
import java.util.Arrays;
import java.util.List;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toList;
public class Documents {
/**
* Return the titles from a list of documents.
*/
public static List<String> titlesOf(Document... documents) {
return Arrays.stream(documents)
.map(d -> d.getTitle())
.collect(toList());
}
public static Integer characterCount(Page page) {
return page.getContent().length();
}
public static List<Integer> pageCharacterCounts(Document document) {
return document.getPages().stream()
.map(doc -> Documents.characterCount(doc))
.collect(toList());
}
public static String print(Document document, PagePrinter pagePrinter) {
StringBuilder output = new StringBuilder();
output.append(pagePrinter.printTitlePage(document));
document.getPages().stream()
.map(p -> pagePrinter.printPage(p))
.forEach(s -> output.append(s));
return output.toString();
}
public static Document translate(Document document, Translator translator) {
return document.getPages().stream()
.map(page -> page.getContent())
.map(content -> translator.translate(content))
.map(translated -> new Page(translated))
.collect(collectingAndThen(toList(),
pages -> new Document(translator.translate(document.getTitle()), pages)));
}
}