diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java b/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java
index c09d071..502a507 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/base/its/ItsConfig.java
@@ -14,10 +14,8 @@
 
 package com.googlesource.gerrit.plugins.its.base.its;
 
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
+import static java.util.stream.Collectors.toList;
+
 import com.google.gerrit.common.data.RefConfigSection;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.api.projects.CommentLinkInfo;
@@ -42,6 +40,7 @@
 import com.googlesource.gerrit.plugins.its.base.validation.ItsAssociationPolicy;
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import java.util.regex.Pattern;
 import org.eclipse.jgit.lib.Config;
 import org.slf4j.Logger;
@@ -195,22 +194,11 @@
    */
   public Pattern getIssuePattern() {
     Optional<String> match =
-        FluentIterable.from(getCommentLinkInfo(getCommentLinkName()))
-            .filter(
-                new Predicate<CommentLinkInfo>() {
-                  @Override
-                  public boolean apply(CommentLinkInfo input) {
-                    return input.match != null && !input.match.trim().isEmpty();
-                  }
-                })
-            .transform(
-                new Function<CommentLinkInfo, String>() {
-                  @Override
-                  public String apply(CommentLinkInfo input) {
-                    return input.match;
-                  }
-                })
-            .last();
+        getCommentLinkInfo(getCommentLinkName())
+            .stream()
+            .filter(input -> input.match != null && !input.match.trim().isEmpty())
+            .map(input -> input.match)
+            .reduce((a, b) -> b);
 
     String defPattern = gerritConfig.getString("commentlink", getCommentLinkName(), "match");
 
@@ -218,7 +206,7 @@
       return null;
     }
 
-    return Pattern.compile(match.or(defPattern));
+    return Pattern.compile(match.orElse(defPattern));
   }
 
   /**
@@ -282,15 +270,10 @@
     NameKey projectName = currentProjectName.get();
     if (projectName != null) {
       List<CommentLinkInfo> commentlinks = projectCache.get(projectName).getCommentLinks();
-      return FluentIterable.from(commentlinks)
-          .filter(
-              new Predicate<CommentLinkInfo>() {
-                @Override
-                public boolean apply(CommentLinkInfo input) {
-                  return input.name.equals(commentlinkName);
-                }
-              })
-          .toList();
+      return commentlinks
+          .stream()
+          .filter(input -> input.name.equals(commentlinkName))
+          .collect(toList());
     }
     return Collections.emptyList();
   }
