diff --git a/src/test/examplesJava17/lambda/Lambda.java b/src/test/examplesJava17/lambda/Lambda.java
new file mode 100644
index 0000000..d0c1035
--- /dev/null
+++ b/src/test/examplesJava17/lambda/Lambda.java
@@ -0,0 +1,46 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package lambda;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Lambda {
+
+  interface StringPredicate {
+
+    boolean test(String t);
+
+    default StringPredicate or(StringPredicate other) {
+      return (t) -> test(t) || other.test(t);
+    }
+  }
+
+  public static void main(String[] args) {
+    ArrayList<String> strings = new ArrayList<>();
+    strings.add("abc");
+    strings.add("abb");
+    strings.add("bbc");
+    strings.add("aac");
+    strings.add("acc");
+    StringPredicate aaStart = Lambda::aaStart;
+    StringPredicate bbNot = Lambda::bbNot;
+    StringPredicate full = aaStart.or(bbNot);
+    for (String string : ((List<String>) strings.clone())) {
+      if (full.test(string)) {
+        strings.remove(string);
+      }
+    }
+    System.out.println(strings);
+  }
+
+  private static boolean aaStart(String str) {
+    return str.startsWith("aa");
+  }
+
+  private static boolean bbNot(String str) {
+    return !str.contains("bb");
+  }
+}
diff --git a/src/test/examplesJava17/nest/NestLambda.java b/src/test/examplesJava17/nest/NestLambda.java
index 2c690b5..c60a8fb 100644
--- a/src/test/examplesJava17/nest/NestLambda.java
+++ b/src/test/examplesJava17/nest/NestLambda.java
@@ -4,8 +4,6 @@
 
 package nest;
 
-import java.util.function.Consumer;
-
 public class NestLambda {
 
   private void print(Object o) {
@@ -16,9 +14,14 @@
     return new Inner();
   }
 
-  class Inner {
+  // Avoids java.util.Consumer to run below on Apis below 24.
+  interface ThisConsumer<T> {
+    void accept(T t);
+  }
 
-    void exec(Consumer<Object> consumer) {
+  class Inner implements Itf {
+
+    void exec(ThisConsumer<String> consumer) {
       consumer.accept("inner");
     }
 
@@ -27,7 +30,22 @@
     }
   }
 
+  interface Itf {
+    private void printItf(Object o) {
+      System.out.println("printed from itf: " + o);
+    }
+  }
+
+  void exec(ThisConsumer<String> consumer) {
+    consumer.accept("here");
+  }
+
+  void execItfLambda(Itf itf) {
+    exec(itf::printItf);
+  }
+
   public static void main(String[] args) {
     new NestLambda().getInner().execLambda();
+    new NestLambda().execItfLambda(new Itf() {});
   }
 }
