Bläddra i källkod

grep: improve reference solution

Frida Johanne Tveit 8 år sedan
förälder
incheckning
73e7ba6394
1 ändrade filer med 10 tillägg och 7 borttagningar
  1. 10
    7
      exercises/grep/.meta/src/reference/java/GrepTool.java

+ 10
- 7
exercises/grep/.meta/src/reference/java/GrepTool.java Visa fil

10
 class GrepTool {
10
 class GrepTool {
11
 
11
 
12
     String grep(String pattern, List<String> flags, List<String> files) {
12
     String grep(String pattern, List<String> flags, List<String> files) {
13
-        boolean shouldAddFilename = files.size() > 1;
13
+        boolean shouldAddFilenameToEachLine = files.size() > 1;
14
         return files
14
         return files
15
             .stream()
15
             .stream()
16
-            .map(file -> grepFile(pattern, flags, file, shouldAddFilename))
16
+            .map(file -> grepFile(pattern, flags, file, shouldAddFilenameToEachLine))
17
             .filter(line -> !line.isEmpty())
17
             .filter(line -> !line.isEmpty())
18
             .collect(Collectors.joining("\n"));
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
         List<String> lines = readFile(filename);
22
         List<String> lines = readFile(filename);
23
+
23
         String matchingLines = IntStream.range(0, lines.size())
24
         String matchingLines = IntStream.range(0, lines.size())
24
             .filter(lineIndex -> lineMatchesPattern(lines.get(lineIndex), pattern, flags))
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
             .collect(Collectors.joining("\n"));
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
     private boolean lineMatchesPattern(String line, String pattern, List<String> flags) {
36
     private boolean lineMatchesPattern(String line, String pattern, List<String> flags) {