package com.levelup.java.io; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; import org.apache.log4j.Logger; import org.junit.Test; import com.google.common.base.Splitter; /** * This java example will demonstrate how to convert each * line in a text file to an object * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/transform-text-file-to-arraylist-objects/'>Transform text file to Objects</a> */ public class TransformTextFileToObjects { private static final Logger logger = Logger.getLogger(TransformTextFileToObjects.class); class Question { private String question; private List<String> possibleAnswers; private int answer; @Override public String toString() { return "Question [question=" + question + ", possibleAnswers=" + possibleAnswers + ", answer=" + answer + "]"; } } Function<String, Question> mapLineToQuestion = new Function<String, Question>() { public Question apply(String line) { Question question = new Question(); List<String> questionPieces = Splitter.on("|").trimResults() .omitEmptyStrings().splitToList(line); question.question = questionPieces.get(0); question.possibleAnswers = Splitter.on(",").trimResults() .omitEmptyStrings().splitToList(questionPieces.get(1)); question.answer = Integer.parseInt(questionPieces.get(2)); return question; } }; @Test public void test() throws IOException { List<Question> questions = Files .lines(Paths .get("src/test/resources/com/levelup/java/io/trivia.txt")) .map(mapLineToQuestion).collect(Collectors.toList()); logger.info(questions); assertTrue(questions.size() == 10); } }