Просмотр исходного кода

grep: improve reference solution

Frida Johanne Tveit 8 лет назад
Родитель
Сommit
73e7ba6394
1 измененных файлов: 10 добавлений и 7 удалений
  1. 10
    7
      exercises/grep/.meta/src/reference/java/GrepTool.java

+ 10
- 7
exercises/grep/.meta/src/reference/java/GrepTool.java Просмотреть файл

@@ -10,24 +10,27 @@ import java.util.stream.IntStream;
10 10
 class GrepTool {
11 11
 
12 12
     String grep(String pattern, List<String> flags, List<String> files) {
13
-        boolean shouldAddFilename = files.size() > 1;
13
+        boolean shouldAddFilenameToEachLine = files.size() > 1;
14 14
         return files
15 15
             .stream()
16
-            .map(file -> grepFile(pattern, flags, file, shouldAddFilename))
16
+            .map(file -> grepFile(pattern, flags, file, shouldAddFilenameToEachLine))
17 17
             .filter(line -> !line.isEmpty())
18 18
             .collect(Collectors.joining("\n"));
19 19
     }
20 20
 
21
-    private String grepFile(String pattern, List<String> flags, String filename, boolean shouldAddFilename) {
21
+    private String grepFile(String pattern, List<String> flags, String filename, boolean shouldAddFilenameToEachLine) {
22 22
         List<String> lines = readFile(filename);
23
+
23 24
         String matchingLines = IntStream.range(0, lines.size())
24 25
             .filter(lineIndex -> lineMatchesPattern(lines.get(lineIndex), pattern, flags))
25
-            .mapToObj(lineIndex -> applyFlagsToLine(lines.get(lineIndex), flags, lineIndex + 1))
26
-            .map(line -> shouldAddFilename ? filename + ":" + line : line)
26
+            .mapToObj(lineIndex -> {
27
+                String lineWithFlagsApplied = applyFlagsToLine(lines.get(lineIndex), flags, lineIndex + 1);
28
+                return shouldAddFilenameToEachLine ? filename + ":" + lineWithFlagsApplied : lineWithFlagsApplied;
29
+            })
27 30
             .collect(Collectors.joining("\n"));
28 31
 
29
-        boolean shouldPrintFilenames = flags.contains("-l");
30
-        return shouldPrintFilenames && !matchingLines.isEmpty() ? filename : matchingLines;
32
+        boolean shouldPrintFilenameInsteadOfMatchingLines = flags.contains("-l");
33
+        return shouldPrintFilenameInsteadOfMatchingLines && !matchingLines.isEmpty() ? filename : matchingLines;
31 34
     }
32 35
 
33 36
     private boolean lineMatchesPattern(String line, String pattern, List<String> flags) {