diff --git a/blame-cache/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java b/blame-cache/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
index c088d81..f960518 100644
--- a/blame-cache/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
+++ b/blame-cache/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
@@ -19,7 +19,6 @@
 
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.Weigher;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Interner;
 import com.google.common.collect.Interners;
@@ -50,13 +49,7 @@
 
   public static CacheBuilder<Key, List<Region>> weigher(
       CacheBuilder<? super Key, ? super List<Region>> builder) {
-    return builder.weigher(
-        new Weigher<Key, List<Region>>() {
-          @Override
-          public int weigh(Key key, List<Region> value) {
-            return value.size();
-          }
-        });
+    return builder.weigher((k, v) -> v.size());
   }
 
   public static class Key {
@@ -106,13 +99,8 @@
     return cache;
   }
 
-  public Callable<List<Region>> newLoader(final Key key, final Repository repo) {
-    return new Callable<List<Region>>() {
-      @Override
-      public List<Region> call() throws IOException {
-        return loadBlame(key, repo);
-      }
-    };
+  public Callable<List<Region>> newLoader(Key key, Repository repo) {
+    return () -> loadBlame(key, repo);
   }
 
   public BlameCacheImpl(CacheBuilder<? super Key, ? super List<Region>> builder) {
diff --git a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
index 1c4410a..f8ca436 100644
--- a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
+++ b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
@@ -50,7 +50,6 @@
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.Constants;
-import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.lib.RepositoryCache;
 import org.eclipse.jgit.lib.RepositoryCache.FileKey;
 import org.eclipse.jgit.storage.file.FileBasedConfig;
@@ -166,18 +165,14 @@
 
   private Servlet createRootedDocServlet(DebugRenderer renderer, String docRoot) {
     File docRepo = new File(docRoot);
-    final FileKey repoKey = FileKey.exact(docRepo, FS.DETECTED);
+    FileKey repoKey = FileKey.exact(docRepo, FS.DETECTED);
 
     RepositoryResolver<HttpServletRequest> resolver =
-        new RepositoryResolver<HttpServletRequest>() {
-          @Override
-          public Repository open(HttpServletRequest req, String name)
-              throws RepositoryNotFoundException {
-            try {
-              return RepositoryCache.open(repoKey, true);
-            } catch (IOException e) {
-              throw new RepositoryNotFoundException(repoKey.getFile(), e);
-            }
+        (req, name) -> {
+          try {
+            return RepositoryCache.open(repoKey, true);
+          } catch (IOException e) {
+            throw new RepositoryNotFoundException(repoKey.getFile(), e);
           }
         };
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
index 1a931e3..4159517 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
@@ -18,7 +18,6 @@
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import java.io.IOException;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
@@ -58,24 +57,21 @@
     try {
       return cache.get(
           id,
-          new Callable<Long>() {
-            @Override
-            public Long call() throws IOException {
-              RevObject o = walk.parseAny(id);
-              while (o instanceof RevTag) {
-                RevTag tag = (RevTag) o;
-                PersonIdent ident = tag.getTaggerIdent();
-                if (ident != null) {
-                  return ident.getWhen().getTime() / 1000;
-                }
-                o = tag.getObject();
-                walk.parseHeaders(o);
+          () -> {
+            RevObject o = walk.parseAny(id);
+            while (o instanceof RevTag) {
+              RevTag tag = (RevTag) o;
+              PersonIdent ident = tag.getTaggerIdent();
+              if (ident != null) {
+                return ident.getWhen().getTime() / 1000;
               }
-              if (o.getType() == Constants.OBJ_COMMIT) {
-                return Long.valueOf(((RevCommit) o).getCommitTime());
-              }
-              return Long.MIN_VALUE;
+              o = tag.getObject();
+              walk.parseHeaders(o);
             }
+            if (o.getType() == Constants.OBJ_COMMIT) {
+              return Long.valueOf(((RevCommit) o).getCommitTime());
+            }
+            return Long.MIN_VALUE;
           });
     } catch (ExecutionException e) {
       Throwables.propagateIfInstanceOf(e.getCause(), IOException.class);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
index 3bb3ac0..325b8cf 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
@@ -30,7 +30,6 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Objects;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Stream;
@@ -113,12 +112,7 @@
     try {
       return cache.get(
           new Key(access.getUserKey(), access.getRepositoryName(), id),
-          new Callable<Boolean>() {
-            @Override
-            public Boolean call() throws IOException {
-              return isVisible(repo, walk, id, Arrays.asList(knownReachable));
-            }
-          });
+          () -> isVisible(repo, walk, id, Arrays.asList(knownReachable)));
     } catch (ExecutionException e) {
       Throwables.propagateIfInstanceOf(e.getCause(), IOException.class);
       throw new IOException(e);
