Text file manipulation with Java 8 and Guava
You are using Java 8's functional stream programming, but you leave out method chaining. Depending on how you chain methods, it could be more or it could be less readable. You might be imagining this:

readFile("dictionary.csv").stream().map(line -&gt; Splitter.on(",").splitToList(line)).collect(Collectors.toMap(l -&gt; Lists.newArrayList(l.subList(0, 2)), l -&gt; l.get(2)));


There is no way I could read that. However, consider this:

Map&lt;List&lt;String&gt;, String&gt; translationMap = readFile("dictionary.csv").stream()
            .map(line -&gt; Splitter.on(",").splitToList(line))
            .collect(
                Collectors.toMap(
                    l -&gt; Lists.newArrayList(l.subList(0, 2)),
                    l -&gt; l.get(2)
                )
            );


I find this much more readable. By simply reading vertically, I can determine that the code does this:


Reads dictionary.csv into a list of strings (via readFile).
Split each string in the dictionary on ",", into a List&lt;String&gt;.
Collect the List&lt;String&gt;s into a Map, where


The keys are the first two elements of each list, still in a List
The values are the 3rd element of each list.



On the other hand, your code as is is littered with type names; do I really need to know that that is a Stream&lt;List&lt;String&gt;&gt; when that's easily determined from context?:

List&lt;String&gt; translationFileContent = readFile("dictionary.csv");
Stream&lt;List&lt;String&gt;&gt; translationLines = translationFileContent.stream().map(
  line -&gt; Splitter.on(",").splitToList(line));
Map&lt;List&lt;String&gt;, String&gt; translationMap = translationLines.collect(Collectors.toMap(l -&gt; Lists.newArrayList(l.subList(0, 2)), l -&gt; l.get(2)));




Alternatively, if you really like the temporary variables, put some empty lines in there to separate logical sections. Also, consider using Project Lombok, where you could just do this:

List&lt;String&gt; translationFileContent = readFile("dictionary.csv");
val translationLines = translationFileContent.stream().map(
    line -&gt; Splitter.on(",").splitToList(line));
val translationMap = translationLines.collect(Collectors.toMap(l -&gt; Lists.newArrayList(l.subList(0, 2)), l -&gt; l.get(2)));


(Coder discretion advised on where you should use val).