You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2018/07/09 07:49:25 UTC

[03/30] calcite git commit: [CALCITE-2259] Allow Java 8 syntax

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java
----------------------------------------------------------------------
diff --git a/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java b/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java
index fb24043..8f76c1b 100644
--- a/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java
+++ b/linq4j/src/test/java/org/apache/calcite/linq4j/test/Linq4jTest.java
@@ -77,68 +77,28 @@ import static org.junit.Assert.fail;
  * Tests for LINQ4J.
  */
 public class Linq4jTest {
-  public static final Function1<Employee, String> EMP_NAME_SELECTOR =
-      new Function1<Employee, String>() {
-        public String apply(Employee employee) {
-          return employee.name;
-        }
-      };
+  public static final Function1<Employee, String> EMP_NAME_SELECTOR = employee -> employee.name;
 
   public static final Function1<Employee, Integer> EMP_DEPTNO_SELECTOR =
-      new Function1<Employee, Integer>() {
-        public Integer apply(Employee employee) {
-          return employee.deptno;
-        }
-      };
+      employee -> employee.deptno;
 
-  public static final Function1<Employee, Integer> EMP_EMPNO_SELECTOR =
-      new Function1<Employee, Integer>() {
-        public Integer apply(Employee employee) {
-          return employee.empno;
-        }
-      };
+  public static final Function1<Employee, Integer> EMP_EMPNO_SELECTOR = employee -> employee.empno;
 
   public static final Function1<Department, Enumerable<Employee>> DEPT_EMPLOYEES_SELECTOR =
-      new Function1<Department, Enumerable<Employee>>() {
-        public Enumerable<Employee> apply(Department a0) {
-          return Linq4j.asEnumerable(a0.employees);
-        }
-      };
+      a0 -> Linq4j.asEnumerable(a0.employees);
 
   public static final Function1<Department, String> DEPT_NAME_SELECTOR =
-      new Function1<Department, String>() {
-        public String apply(Department department) {
-          return department.name;
-        }
-      };
+      department -> department.name;
 
   public static final Function1<Department, Integer> DEPT_DEPTNO_SELECTOR =
-      new Function1<Department, Integer>() {
-        public Integer apply(Department department) {
-          return department.deptno;
-        }
-      };
+      department -> department.deptno;
 
   public static final IntegerFunction1<Department> DEPT_DEPTNO_SELECTOR2 =
-      new IntegerFunction1<Department>() {
-        public int apply(Department department) {
-          return department.deptno;
-        }
-      };
+      department -> department.deptno;
 
-  public static final Function1<Object, Integer> ONE_SELECTOR =
-      new Function1<Object, Integer>() {
-        public Integer apply(Object employee) {
-          return 1;
-        }
-      };
+  public static final Function1<Object, Integer> ONE_SELECTOR = employee -> 1;
 
-  private static final Function2<Object, Object, Integer> PAIR_SELECTOR =
-      new Function2<Object, Object, Integer>() {
-        public Integer apply(Object employee, Object v2) {
-          return 1;
-        }
-      };
+  private static final Function2<Object, Object, Integer> PAIR_SELECTOR = (employee, v2) -> 1;
 
   @Test public void testSelect() {
     List<String> names =
@@ -151,12 +111,7 @@ public class Linq4jTest {
   @Test public void testWhere() {
     List<String> names =
         Linq4j.asEnumerable(emps)
-            .where(
-                new Predicate1<Employee>() {
-                  public boolean apply(Employee employee) {
-                    return employee.deptno < 15;
-                  }
-                })
+            .where(employee -> employee.deptno < 15)
             .select(EMP_NAME_SELECTOR)
             .toList();
     assertEquals("[Fred, Eric, Janet]", names.toString());
@@ -166,12 +121,7 @@ public class Linq4jTest {
     // Returns every other employee.
     List<String> names =
         Linq4j.asEnumerable(emps)
-            .where(
-                new Predicate2<Employee, Integer>() {
-                  public boolean apply(Employee employee, Integer n) {
-                    return n % 2 == 0;
-                  }
-                })
+            .where((employee, n) -> n % 2 == 0)
             .select(EMP_NAME_SELECTOR)
             .toList();
     assertEquals("[Fred, Eric]", names.toString());
@@ -181,12 +131,7 @@ public class Linq4jTest {
     final List<String> nameSeqs =
         Linq4j.asEnumerable(depts)
             .selectMany(DEPT_EMPLOYEES_SELECTOR)
-            .select(
-                new Function2<Employee, Integer, String>() {
-                  public String apply(Employee v1, Integer v2) {
-                    return "#" + v2 + ": " + v1.name;
-                  }
-                })
+            .select((v1, v2) -> "#" + v2 + ": " + v1.name)
             .toList();
     assertEquals(
         "[#0: Fred, #1: Eric, #2: Janet, #3: Bill]", nameSeqs.toString());
@@ -199,12 +144,7 @@ public class Linq4jTest {
 
   @Test public void testCountPredicate() {
     final int count =
-        Linq4j.asEnumerable(depts).count(
-            new Predicate1<Department>() {
-              public boolean apply(Department v1) {
-                return v1.employees.size() > 0;
-              }
-            });
+        Linq4j.asEnumerable(depts).count(v1 -> v1.employees.size() > 0);
     assertEquals(2, count);
   }
 
@@ -215,27 +155,14 @@ public class Linq4jTest {
 
   @Test public void testLongCountPredicate() {
     final long count =
-        Linq4j.asEnumerable(depts).longCount(
-            new Predicate1<Department>() {
-              public boolean apply(Department v1) {
-                return v1.employees.size() > 0;
-              }
-            });
+        Linq4j.asEnumerable(depts).longCount(v1 -> v1.employees.size() > 0);
     assertEquals(2, count);
   }
 
   @Test public void testAllPredicate() {
-    Predicate1<Employee> allEmpnoGE100 = new Predicate1<Employee>() {
-      public boolean apply(Employee emp) {
-        return emp.empno >= 100;
-      }
-    };
+    Predicate1<Employee> allEmpnoGE100 = emp -> emp.empno >= 100;
 
-    Predicate1<Employee> allEmpnoGT100 = new Predicate1<Employee>() {
-      public boolean apply(Employee emp) {
-        return emp.empno > 100;
-      }
-    };
+    Predicate1<Employee> allEmpnoGT100 = emp -> emp.empno > 100;
 
     assertTrue(Linq4j.asEnumerable(emps).all(allEmpnoGE100));
     assertFalse(Linq4j.asEnumerable(emps).all(allEmpnoGT100));
@@ -248,17 +175,9 @@ public class Linq4jTest {
   }
 
   @Test public void testAnyPredicate() {
-    Predicate1<Department> deptoNameIT = new Predicate1<Department>() {
-      public boolean apply(Department v1) {
-        return v1.name != null && v1.name.equals("IT");
-      }
-    };
+    Predicate1<Department> deptoNameIT = v1 -> v1.name != null && v1.name.equals("IT");
 
-    Predicate1<Department> deptoNameSales = new Predicate1<Department>() {
-      public boolean apply(Department v1) {
-        return v1.name != null && v1.name.equals("Sales");
-      }
-    };
+    Predicate1<Department> deptoNameSales = v1 -> v1.name != null && v1.name.equals("Sales");
 
     assertFalse(Linq4j.asEnumerable(depts).any(deptoNameIT));
     assertTrue(Linq4j.asEnumerable(depts).any(deptoNameSales));
@@ -315,11 +234,7 @@ public class Linq4jTest {
             .select(DEPT_NAME_SELECTOR)
             .aggregate(
                 null,
-                new Function2<String, String, String>() {
-                  public String apply(String v1, String v2) {
-                    return v1 == null ? v2 : v1 + "," + v2;
-                  }
-                }));
+                (Function2<String, String, String>) (v1, v2) -> v1 == null ? v2 : v1 + "," + v2));
   }
 
   @Test public void testToMap() {
@@ -333,15 +248,16 @@ public class Linq4jTest {
   @Test public void testToMapWithComparer() {
     final Map<String, String> map =
         Linq4j.asEnumerable(Arrays.asList("foo", "bar", "far"))
-            .toMap(Functions.<String>identitySelector(), new EqualityComparer<String>() {
-              public boolean equal(String v1, String v2) {
-                return String.CASE_INSENSITIVE_ORDER.compare(v1, v2) == 0;
-              }
-              public int hashCode(String s) {
-                return s == null ? Objects.hashCode(null)
-                    : s.toLowerCase(Locale.ROOT).hashCode();
-              }
-            });
+            .toMap(Functions.identitySelector(),
+                new EqualityComparer<String>() {
+                  public boolean equal(String v1, String v2) {
+                    return String.CASE_INSENSITIVE_ORDER.compare(v1, v2) == 0;
+                  }
+                  public int hashCode(String s) {
+                    return s == null ? Objects.hashCode(null)
+                        : s.toLowerCase(Locale.ROOT).hashCode();
+                  }
+                });
     assertEquals(3, map.size());
     assertTrue(map.get("foo").equals("foo"));
     assertTrue(map.get("Foo").equals("foo"));
@@ -359,12 +275,8 @@ public class Linq4jTest {
   @Test public void testToMap2WithComparer() {
     final Map<String, String> map =
         Linq4j.asEnumerable(Arrays.asList("foo", "bar", "far"))
-            .toMap(Functions.<String>identitySelector(),
-                new Function1<String, String>() {
-                  public String apply(String x) {
-                    return x == null ? null : x.toUpperCase(Locale.ROOT);
-                  }
-                },
+            .toMap(Functions.identitySelector(),
+                x -> x == null ? null : x.toUpperCase(Locale.ROOT),
                 new EqualityComparer<String>() {
                   public boolean equal(String v1, String v2) {
                     return String.CASE_INSENSITIVE_ORDER.compare(v1, v2) == 0;
@@ -430,13 +342,8 @@ public class Linq4jTest {
 
     assertEquals(
         "[10:3, 30:1]",
-        lookup.applyResultSelector(
-            new Function2<Integer, Enumerable<String>, String>() {
-              public String apply(Integer v1, Enumerable<String> v2) {
-                return v1 + ":" + v2.count();
-              }
-            })
-            .orderBy(Functions.<String>identitySelector())
+        lookup.applyResultSelector((v1, v2) -> v1 + ":" + v2.count())
+            .orderBy(Functions.identitySelector())
             .toList().toString());
   }
 
@@ -538,17 +445,9 @@ public class Linq4jTest {
   }
 
   @Test public void testFirstPredicate1() {
-    Predicate1<String> startWithS = new Predicate1<String>() {
-      public boolean apply(String s) {
-        return s != null && Character.toString(s.charAt(0)).equals("S");
-      }
-    };
+    Predicate1<String> startWithS = s -> s != null && Character.toString(s.charAt(0)).equals("S");
 
-    Predicate1<Integer> numberGT15 = new Predicate1<Integer>() {
-      public boolean apply(Integer i) {
-        return i > 15;
-      }
-    };
+    Predicate1<Integer> numberGT15 = i -> i > 15;
 
     String[] people = {"Brill", "Smith", "Simpsom"};
     String[] peopleWithoutCharS = {"Brill", "Andrew", "Alice"};
@@ -578,17 +477,9 @@ public class Linq4jTest {
   }
 
   @Test public void testFirstOrDefaultPredicate1() {
-    Predicate1<String> startWithS = new Predicate1<String>() {
-      public boolean apply(String s) {
-        return s != null && Character.toString(s.charAt(0)).equals("S");
-      }
-    };
+    Predicate1<String> startWithS = s -> s != null && Character.toString(s.charAt(0)).equals("S");
 
-    Predicate1<Integer> numberGT15 = new Predicate1<Integer>() {
-      public boolean apply(Integer i) {
-        return i > 15;
-      }
-    };
+    Predicate1<Integer> numberGT15 = i -> i > 15;
 
     String[] people = {"Brill", "Smith", "Simpsom"};
     String[] peopleWithoutCharS = {"Brill", "Andrew", "Alice"};
@@ -643,17 +534,9 @@ public class Linq4jTest {
   }
 
   @Test public void testSinglePredicate1() {
-    Predicate1<String> startWithS = new Predicate1<String>() {
-      public boolean apply(String s) {
-        return s != null && Character.toString(s.charAt(0)).equals("S");
-      }
-    };
+    Predicate1<String> startWithS = s -> s != null && Character.toString(s.charAt(0)).equals("S");
 
-    Predicate1<Integer> numberGT15 = new Predicate1<Integer>() {
-      public boolean apply(Integer i) {
-        return i > 15;
-      }
-    };
+    Predicate1<Integer> numberGT15 = i -> i > 15;
 
     String[] people = {"Brill", "Smith"};
     String[] twoPeopleWithCharS = {"Brill", "Smith", "Simpson"};
@@ -697,17 +580,9 @@ public class Linq4jTest {
 
   @Test
   public void testSingleOrDefaultPredicate1() {
-    Predicate1<String> startWithS = new Predicate1<String>() {
-      public boolean apply(String s) {
-        return s != null && Character.toString(s.charAt(0)).equals("S");
-      }
-    };
+    Predicate1<String> startWithS = s -> s != null && Character.toString(s.charAt(0)).equals("S");
 
-    Predicate1<Integer> numberGT15 = new Predicate1<Integer>() {
-      public boolean apply(Integer i) {
-        return i > 15;
-      }
-    };
+    Predicate1<Integer> numberGT15 = i -> i > 15;
 
     String[] people = {"Brill", "Smith"};
     String[] twoPeopleWithCharS = {"Brill", "Smith", "Simpson"};
@@ -749,12 +624,7 @@ public class Linq4jTest {
 
   @Test public void testSelectorEqualityComparer() {
     final EqualityComparer<Employee> comparer =
-        Functions.selectorComparer(
-            new Function1<Employee, Object>() {
-              public Object apply(Employee a0) {
-                return a0.deptno;
-              }
-            });
+        Functions.selectorComparer((Function1<Employee, Object>) a0 -> a0.deptno);
     assertTrue(comparer.equal(emps[0], emps[0]));
     assertEquals(comparer.hashCode(emps[0]), comparer.hashCode(emps[0]));
 
@@ -793,7 +663,7 @@ public class Linq4jTest {
 
     StringBuilder buf = new StringBuilder();
     for (Grouping<String, Employee> grouping
-        : lookup.orderBy(Linq4jTest.<String, Employee>groupingKeyExtractor())) {
+        : lookup.orderBy(Linq4jTest.groupingKeyExtractor())) {
       buf.append(grouping).append("\n");
     }
     assertEquals(
@@ -803,11 +673,7 @@ public class Linq4jTest {
   }
 
   private static <K extends Comparable, V> Function1<Grouping<K, V>, K> groupingKeyExtractor() {
-    return new Function1<Grouping<K, V>, K>() {
-      public K apply(Grouping<K, V> a0) {
-        return a0.getKey();
-      }
-    };
+    return Grouping::getKey;
   }
 
   /**
@@ -818,20 +684,11 @@ public class Linq4jTest {
     String s =
         Linq4j.asEnumerable(emps)
             .groupBy(
-                EMP_DEPTNO_SELECTOR, new Function0<String>() {
-                  public String apply() {
-                    return null;
-                  }
-                }, new Function2<String, Employee, String>() {
-                  public String apply(String v1, Employee e0) {
-                    return v1 == null ? e0.name : (v1 + "+" + e0.name);
-                  }
-                }, new Function2<Integer, String, String>() {
-                  public String apply(Integer v1, String v2) {
-                    return v1 + ": " + v2;
-                  }
-                })
-            .orderBy(Functions.<String>identitySelector())
+                EMP_DEPTNO_SELECTOR,
+                (Function0<String>) () -> null,
+                (v1, e0) -> v1 == null ? e0.name : (v1 + "+" + e0.name),
+                (v1, v2) -> v1 + ": " + v2)
+            .orderBy(Functions.identitySelector())
             .toList()
             .toString();
     assertEquals(
@@ -849,21 +706,8 @@ public class Linq4jTest {
     String s =
         Linq4j.asEnumerable(emps)
             .aggregate(
-                new Function0<String>() {
-                  public String apply() {
-                    return null;
-                  }
-                }.apply(), //CHECKSTYLE: IGNORE 0
-                new Function2<String, Employee, String>() {
-                  public String apply(String v1, Employee e0) {
-                    return v1 == null ? e0.name : (v1 + "+" + e0.name);
-                  }
-                },
-                new Function1<String, String>() {
-                  public String apply(String v2) {
-                    return "<no key>: " + v2;
-                  }
-                });
+                ((Function0<String>) () -> null).apply(), //CHECKSTYLE: IGNORE 0
+                (v1, e0) -> v1 == null ? e0.name : (v1 + "+" + e0.name), v2 -> "<no key>: " + v2);
     assertEquals(
         "<no key>: Fred+Bill+Eric+Janet",
         s);
@@ -903,11 +747,7 @@ public class Linq4jTest {
 
   @Test public void testTransformEnumerator() {
     final List<String> strings = Arrays.asList("one", "two", "three");
-    final Function1<String, Integer> func = new Function1<String, Integer>() {
-      public Integer apply(String a0) {
-        return a0.length();
-      }
-    };
+    final Function1<String, Integer> func = String::length;
     final Enumerator<Integer> enumerator =
         Linq4j.transform(Linq4j.enumerator(strings), func);
     assertThat(enumerator.moveNext(), is(true));
@@ -919,7 +759,7 @@ public class Linq4jTest {
     assertThat(enumerator.moveNext(), is(false));
 
     final Enumerator<Integer> enumerator2 =
-        Linq4j.transform(Linq4j.<String>emptyEnumerator(), func);
+        Linq4j.transform(Linq4j.emptyEnumerator(), func);
     assertThat(enumerator2.moveNext(), is(false));
   }
 
@@ -1078,20 +918,17 @@ public class Linq4jTest {
                 Linq4j.asEnumerable(emps)
                     .concat(Linq4j.asEnumerable(badEmps)),
                 DEPT_DEPTNO_SELECTOR,
-                EMP_DEPTNO_SELECTOR,
-                new Function2<Department, Enumerable<Employee>, String>() {
-                  public String apply(Department v1, Enumerable<Employee> v2) {
-                    final StringBuilder buf = new StringBuilder("[");
-                    int n = 0;
-                    for (Employee employee : v2) {
-                      if (n++ > 0) {
-                        buf.append(", ");
-                      }
-                      buf.append(employee.name);
+                EMP_DEPTNO_SELECTOR, (v1, v2) -> {
+                  final StringBuilder buf = new StringBuilder("[");
+                  int n = 0;
+                  for (Employee employee : v2) {
+                    if (n++ > 0) {
+                      buf.append(", ");
                     }
-                    return buf.append("] work(s) in ").append(v1.name)
-                        .toString();
+                    buf.append(employee.name);
                   }
+                  return buf.append("] work(s) in ").append(v1.name)
+                      .toString();
                 })
             .toList()
             .toString();
@@ -1112,20 +949,17 @@ public class Linq4jTest {
                 Linq4j.asEnumerable(emps)
                     .concat(Linq4j.asEnumerable(badEmps)),
                 DEPT_DEPTNO_SELECTOR,
-                EMP_DEPTNO_SELECTOR,
-                new Function2<Department, Enumerable<Employee>, String>() {
-                  public String apply(Department v1, Enumerable<Employee> v2) {
-                    final StringBuilder buf = new StringBuilder("[");
-                    int n = 0;
-                    for (Employee employee : v2) {
-                      if (n++ > 0) {
-                        buf.append(", ");
-                      }
-                      buf.append(employee.name);
+                EMP_DEPTNO_SELECTOR, (v1, v2) -> {
+                  final StringBuilder buf = new StringBuilder("[");
+                  int n = 0;
+                  for (Employee employee : v2) {
+                    if (n++ > 0) {
+                      buf.append(", ");
                     }
-                    return buf.append("] work(s) in ").append(v1.name)
-                        .toString();
+                    buf.append(employee.name);
                   }
+                  return buf.append("] work(s) in ").append(v1.name)
+                      .toString();
                 },
                 new EqualityComparer<Integer>() {
                   public boolean equal(Integer v1, Integer v2) {
@@ -1150,13 +984,8 @@ public class Linq4jTest {
             .join(
                 Linq4j.asEnumerable(depts),
                 EMP_DEPTNO_SELECTOR,
-                DEPT_DEPTNO_SELECTOR,
-                new Function2<Employee, Department, String>() {
-                  public String apply(Employee v1, Department v2) {
-                    return v1.name + " works in " + v2.name;
-                  }
-                })
-            .orderBy(Functions.<String>identitySelector())
+                DEPT_DEPTNO_SELECTOR, (v1, v2) -> v1.name + " works in " + v2.name)
+            .orderBy(Functions.identitySelector())
             .toList()
             .toString();
     assertEquals(
@@ -1178,14 +1007,9 @@ public class Linq4jTest {
             .join(
                 Linq4j.asEnumerable(depts),
                 EMP_DEPTNO_SELECTOR,
-                DEPT_DEPTNO_SELECTOR,
-                new Function2<Employee, Department, String>() {
-                  public String apply(Employee v1, Department v2) {
-                    return v1.name + " works in "
-                        + (v2 == null ? null : v2.name);
-                  }
-                }, null, false, true)
-            .orderBy(Functions.<String>identitySelector())
+                DEPT_DEPTNO_SELECTOR, (v1, v2) -> v1.name + " works in "
+                    + (v2 == null ? null : v2.name), null, false, true)
+            .orderBy(Functions.identitySelector())
             .toList()
             .toString();
     assertEquals(
@@ -1208,14 +1032,9 @@ public class Linq4jTest {
             .join(
                 Linq4j.asEnumerable(depts),
                 EMP_DEPTNO_SELECTOR,
-                DEPT_DEPTNO_SELECTOR,
-                new Function2<Employee, Department, String>() {
-                  public String apply(Employee v1, Department v2) {
-                    return (v1 == null ? null : v1.name)
-                        + " works in " + (v2 == null ? null : v2.name);
-                  }
-                }, null, true, false)
-            .orderBy(Functions.<String>identitySelector())
+                DEPT_DEPTNO_SELECTOR, (v1, v2) -> (v1 == null ? null : v1.name)
+                    + " works in " + (v2 == null ? null : v2.name), null, true, false)
+            .orderBy(Functions.identitySelector())
             .toList()
             .toString();
     assertEquals(
@@ -1238,14 +1057,9 @@ public class Linq4jTest {
             .join(
                 Linq4j.asEnumerable(depts),
                 EMP_DEPTNO_SELECTOR,
-                DEPT_DEPTNO_SELECTOR,
-                new Function2<Employee, Department, String>() {
-                  public String apply(Employee v1, Department v2) {
-                    return (v1 == null ? null : v1.name)
-                        + " works in " + (v2 == null ? null : v2.name);
-                  }
-                }, null, true, true)
-            .orderBy(Functions.<String>identitySelector())
+                DEPT_DEPTNO_SELECTOR, (v1, v2) -> (v1 == null ? null : v1.name)
+                    + " works in " + (v2 == null ? null : v2.name), null, true, true)
+            .orderBy(Functions.identitySelector())
             .toList()
             .toString();
     assertEquals(
@@ -1285,19 +1099,19 @@ public class Linq4jTest {
 
     final Enumerator<List<String>> product0 =
         Linq4j.product(
-            Arrays.asList(Linq4j.<String>emptyEnumerator()));
+            Arrays.asList(Linq4j.emptyEnumerator()));
     assertFalse(product0.moveNext());
 
     final Enumerator<List<String>> productFullEmpty =
         Linq4j.product(
             Arrays.asList(
-                abc.enumerator(), Linq4j.<String>emptyEnumerator()));
+                abc.enumerator(), Linq4j.emptyEnumerator()));
     assertFalse(productFullEmpty.moveNext());
 
     final Enumerator<List<String>> productEmptyFull =
         Linq4j.product(
             Arrays.asList(
-                abc.enumerator(), Linq4j.<String>emptyEnumerator()));
+                abc.enumerator(), Linq4j.emptyEnumerator()));
     assertFalse(productEmptyFull.moveNext());
 
     final Enumerator<List<String>> productAbcXy =
@@ -1347,12 +1161,7 @@ public class Linq4jTest {
         Linq4j.asEnumerable(emps)
             .asQueryable()
             .where(
-                Expressions.lambda(
-                    new Predicate1<Employee>() {
-                      public boolean apply(Employee v1) {
-                        return v1.deptno == 10;
-                      }
-                    }));
+                Expressions.lambda(v1 -> v1.deptno == 10));
     assertEquals(3, nh2.count());
 
     // use lambda, this time call whereN
@@ -1365,7 +1174,7 @@ public class Linq4jTest {
             .asQueryable()
             .whereN(
                 Expressions.lambda(
-                    Predicate2.class,
+                    (Class<Predicate2<Employee, Integer>>) (Class) Predicate2.class,
                     Expressions.andAlso(
                         Expressions.equal(
                             Expressions.field(
@@ -1469,12 +1278,7 @@ public class Linq4jTest {
         Linq4j.asEnumerable(depts);
     final List<Department> deptList =
         EnumerableDefaults.takeWhile(
-            enumerableDepts,
-            new Predicate1<Department>() {
-              public boolean apply(Department v1) {
-                return v1.name.contains("e");
-              }
-            }).toList();
+            enumerableDepts, v1 -> v1.name.contains("e")).toList();
 
     // Only one department:
     // 0: Sales --> true
@@ -1508,11 +1312,7 @@ public class Linq4jTest {
   @Test public void testTakeWhileQueryableFunctionExpressionPredicate() {
     final Queryable<Department> queryableDepts =
         Linq4j.asEnumerable(depts).asQueryable();
-    Predicate1<Department> predicate = new Predicate1<Department>() {
-      public boolean apply(Department v1) {
-        return "HR".equals(v1.name);
-      }
-    };
+    Predicate1<Department> predicate = v1 -> "HR".equals(v1.name);
     List<Department> deptList =
         QueryableDefaults.takeWhile(
             queryableDepts, Expressions.lambda(predicate))
@@ -1520,11 +1320,7 @@ public class Linq4jTest {
 
     assertEquals(0, deptList.size());
 
-    predicate = new Predicate1<Department>() {
-      public boolean apply(Department v1) {
-        return "Sales".equals(v1.name);
-      }
-    };
+    predicate = v1 -> "Sales".equals(v1.name);
     deptList =
         QueryableDefaults.takeWhile(
             queryableDepts, Expressions.lambda(predicate))
@@ -1575,29 +1371,14 @@ public class Linq4jTest {
     assertEquals(2, Linq4j.asEnumerable(depts).skip(1).count());
     assertEquals(
         2,
-        Linq4j.asEnumerable(depts).skipWhile(
-            new Predicate1<Department>() {
-              public boolean apply(Department v1) {
-                return v1.name.equals("Sales");
-              }
-            }).count());
+        Linq4j.asEnumerable(depts).skipWhile(v1 -> v1.name.equals("Sales")).count());
     assertEquals(
         3,
-        Linq4j.asEnumerable(depts).skipWhile(
-            new Predicate1<Department>() {
-              public boolean apply(Department v1) {
-                return !v1.name.equals("Sales");
-              }
-            }).count());
+        Linq4j.asEnumerable(depts).skipWhile(v1 -> !v1.name.equals("Sales")).count());
     assertEquals(
         1,
-        Linq4j.asEnumerable(depts).skipWhile(
-            new Predicate2<Department, Integer>() {
-              public boolean apply(Department v1, Integer v2) {
-                return v1.name.equals("Sales")
-                    || v2 == 1;
-              }
-            }).count());
+        Linq4j.asEnumerable(depts).skipWhile((v1, v2) -> v1.name.equals("Sales")
+            || v2 == 1).count());
 
     assertEquals(
         2, Linq4j.asEnumerable(depts).skip(1).count());
@@ -1605,13 +1386,8 @@ public class Linq4jTest {
         0, Linq4j.asEnumerable(depts).skip(5).count());
     assertEquals(
         1,
-        Linq4j.asEnumerable(depts).skipWhile(
-            new Predicate2<Department, Integer>() {
-              public boolean apply(Department v1, Integer v2) {
-                return v1.name.equals("Sales")
-                    || v2 == 1;
-              }
-            }).count());
+        Linq4j.asEnumerable(depts).skipWhile((v1, v2) -> v1.name.equals("Sales")
+            || v2 == 1).count());
 
     assertEquals(
         2, Linq4j.asEnumerable(depts).asQueryable().skip(1).count());
@@ -1620,13 +1396,8 @@ public class Linq4jTest {
     assertEquals(
         1,
         Linq4j.asEnumerable(depts).asQueryable().skipWhileN(
-            Expressions.<Predicate2<Department, Integer>>lambda(
-                new Predicate2<Department, Integer>() {
-                  public boolean apply(Department v1, Integer v2) {
-                    return v1.name.equals("Sales")
-                        || v2 == 1;
-                  }
-                })).count());
+            Expressions.lambda((v1, v2) -> v1.name.equals("Sales")
+                || v2 == 1)).count());
   }
 
   @Test public void testOrderBy() {
@@ -1649,7 +1420,7 @@ public class Linq4jTest {
         Linq4j.asEnumerable(emps)
             .orderBy(EMP_NAME_SELECTOR)
             .orderBy(
-                EMP_DEPTNO_SELECTOR, Collections.<Integer>reverseOrder())
+                EMP_DEPTNO_SELECTOR, Collections.reverseOrder())
             .toList().toString());
   }
 
@@ -1697,12 +1468,7 @@ public class Linq4jTest {
         new Employee(130, "Janet", 10));
     final List<Employee> result = new ArrayList<>();
     Linq4j.asEnumerable(employees)
-        .where(
-            new Predicate1<Employee>() {
-              public boolean apply(Employee e) {
-                return e.name.contains("e");
-              }
-            })
+        .where(e -> e.name.contains("e"))
         .into(result);
     assertEquals(
         "[Employee(name: Fred, deptno:10), Employee(name: Janet, deptno:10)]",
@@ -1722,12 +1488,7 @@ public class Linq4jTest {
     final List<Grouping<Object, Map.Entry<Employee, Department>>> result =
         new ArrayList<>();
     Linq4j.asEnumerable(empDepts.entrySet())
-        .groupBy(
-            new Function1<Map.Entry<Employee, Department>, Object>() {
-              public Object apply(Map.Entry<Employee, Department> entry) {
-                return entry.getValue();
-              }
-            })
+        .groupBy((Function1<Map.Entry<Employee, Department>, Object>) Map.Entry::getValue)
         .into(result);
     assertNotNull(result.toString());
   }
@@ -1883,17 +1644,9 @@ public class Linq4jTest {
   @Test public void testLastWithPredicate() {
     final Enumerable<String> enumerable =
         Linq4j.asEnumerable(Arrays.asList("jimi", "mitch", "ming"));
-    assertEquals("mitch", enumerable.last(new Predicate1<String>() {
-      public boolean apply(String x) {
-        return x.startsWith("mit");
-      }
-    }));
+    assertEquals("mitch", enumerable.last(x -> x.startsWith("mit")));
     try {
-      enumerable.last(new Predicate1<String>() {
-        public boolean apply(String x) {
-          return false;
-        }
-      });
+      enumerable.last(x -> false);
       fail();
     } catch (Exception ignored) {
       // ok
@@ -1902,11 +1655,9 @@ public class Linq4jTest {
     @SuppressWarnings("unchecked")
     final Enumerable<String> emptyEnumerable = Linq4j.asEnumerable(Collections.EMPTY_LIST);
     try {
-      emptyEnumerable.last(new Predicate1<String>() {
-        public boolean apply(String x) {
-          fail();
-          return false;
-        }
+      emptyEnumerable.last(x -> {
+        fail();
+        return false;
       });
       fail();
     } catch (Exception ignored) {
@@ -1917,44 +1668,28 @@ public class Linq4jTest {
   @Test public void testLastOrDefaultWithPredicate() {
     final Enumerable<String> enumerable =
         Linq4j.asEnumerable(Arrays.asList("jimi", "mitch", "ming"));
-    assertEquals("mitch", enumerable.lastOrDefault(new Predicate1<String>() {
-      public boolean apply(String x) {
-        return x.startsWith("mit");
-      }
-    }));
-    assertNull(enumerable.lastOrDefault(new Predicate1<String>() {
-      public boolean apply(String x) {
-        return false;
-      }
-    }));
+    assertEquals("mitch", enumerable.lastOrDefault(x -> x.startsWith("mit")));
+    assertNull(enumerable.lastOrDefault(x -> false));
 
     @SuppressWarnings("unchecked")
     final Enumerable<String> emptyEnumerable = Linq4j.asEnumerable(Collections.EMPTY_LIST);
-    assertNull(emptyEnumerable.lastOrDefault(new Predicate1<String>() {
-      public boolean apply(String x) {
-        fail();
-        return false;
-      }
-    }));
+    assertNull(
+        emptyEnumerable.lastOrDefault(x -> {
+          fail();
+          return false;
+        }));
   }
 
   @Test public void testSelectManyWithIndexableSelector() {
     final int[] indexRef = new int[]{0};
     final List<String> nameSeqs =
         Linq4j.asEnumerable(depts)
-            .selectMany(new Function2<Department, Integer, Enumerable<Employee>>() {
-              public Enumerable<Employee> apply(Department element, Integer index) {
-                assertEquals(indexRef[0], index.longValue());
-                indexRef[0] = index + 1;
-                return Linq4j.asEnumerable(element.employees);
-              }
+            .selectMany((element, index) -> {
+              assertEquals(indexRef[0], index.longValue());
+              indexRef[0] = index + 1;
+              return Linq4j.asEnumerable(element.employees);
             })
-            .select(
-                new Function2<Employee, Integer, String>() {
-                  public String apply(Employee v1, Integer v2) {
-                    return "#" + v2 + ": " + v1.name;
-                  }
-                })
+            .select((v1, v2) -> "#" + v2 + ": " + v1.name)
             .toList();
     assertEquals(
         "[#0: Fred, #1: Eric, #2: Janet, #3: Bill]", nameSeqs.toString());
@@ -1964,16 +1699,8 @@ public class Linq4jTest {
     final List<String> nameSeqs =
         Linq4j.asEnumerable(depts)
             .selectMany(DEPT_EMPLOYEES_SELECTOR,
-                new Function2<Department, Employee, String>() {
-                  public String apply(Department element, Employee subElement) {
-                    return subElement.name + "@" + element.name;
-                  }
-                })
-            .select(new Function2<String, Integer, String>() {
-              public String apply(String v0, Integer v1) {
-                return "#" + v1 + ": " + v0;
-              }
-            })
+                (element, subElement) -> subElement.name + "@" + element.name)
+            .select((v0, v1) -> "#" + v1 + ": " + v0)
             .toList();
     assertEquals(
         "[#0: Fred@Sales, #1: Eric@Sales, #2: Janet@Sales, #3: Bill@Marketing]",
@@ -1984,24 +1711,12 @@ public class Linq4jTest {
     final int[] indexRef = new int[]{0};
     final List<String> nameSeqs =
         Linq4j.asEnumerable(depts)
-            .selectMany(
-                new Function2<Department, Integer, Enumerable<Employee>>() {
-                  public Enumerable<Employee> apply(Department element, Integer index) {
-                    assertEquals(indexRef[0], index.longValue());
-                    indexRef[0] = index + 1;
-                    return Linq4j.asEnumerable(element.employees);
-                  }
-                },
-                new Function2<Department, Employee, String>() {
-                  public String apply(Department element, Employee subElement) {
-                    return subElement.name + "@" + element.name;
-                  }
-                })
-            .select(new Function2<String, Integer, String>() {
-              public String apply(String v0, Integer v1) {
-                return "#" + v1 + ": " + v0;
-              }
-            })
+            .selectMany((element, index) -> {
+              assertEquals(indexRef[0], index.longValue());
+              indexRef[0] = index + 1;
+              return Linq4j.asEnumerable(element.employees);
+            }, (element, subElement) -> subElement.name + "@" + element.name)
+            .select((v0, v1) -> "#" + v1 + ": " + v0)
             .toList();
     assertEquals(
         "[#0: Fred@Sales, #1: Eric@Sales, #2: Janet@Sales, #3: Bill@Marketing]",
@@ -2036,25 +1751,14 @@ public class Linq4jTest {
   }
 
   @Test public void testSequenceEqualWithoutCollection() {
-    final Enumerable<String> enumerable1 = Linq4j.asEnumerable(new Iterable<String>() {
-      public Iterator<String> iterator() {
-        return Arrays.asList("ming", "foo", "bar").iterator();
-      }
-    });
-    final Enumerable<String> enumerable2 = Linq4j.asEnumerable(new Iterable<String>() {
-      public Iterator<String> iterator() {
-        return Arrays.asList("ming", "foo", "bar").iterator();
-      }
-    });
+    final Enumerable<String> enumerable1 = Linq4j.asEnumerable(
+        () -> Arrays.asList("ming", "foo", "bar").iterator());
+    final Enumerable<String> enumerable2 = Linq4j.asEnumerable(
+        () -> Arrays.asList("ming", "foo", "bar").iterator());
     assertTrue(enumerable1.sequenceEqual(enumerable2));
     assertFalse(
         enumerable1.sequenceEqual(
-            Linq4j.asEnumerable(
-                new Iterable<String>() {
-                  public Iterator<String> iterator() {
-                    return Arrays.asList("ming", "foo", "far").iterator();
-                  }
-                })));
+            Linq4j.asEnumerable(() -> Arrays.asList("ming", "foo", "far").iterator())));
 
     try {
       EnumerableDefaults.sequenceEqual(null, enumerable2);
@@ -2111,16 +1815,10 @@ public class Linq4jTest {
   }
 
   @Test public void testSequenceEqualWithComparerWithoutCollection() {
-    final Enumerable<String> enumerable1 = Linq4j.asEnumerable(new Iterable<String>() {
-      public Iterator<String> iterator() {
-        return Arrays.asList("ming", "foo", "bar").iterator();
-      }
-    });
-    final Enumerable<String> enumerable2 = Linq4j.asEnumerable(new Iterable<String>() {
-      public Iterator<String> iterator() {
-        return Arrays.asList("ming", "foo", "bar").iterator();
-      }
-    });
+    final Enumerable<String> enumerable1 = Linq4j.asEnumerable(
+        () -> Arrays.asList("ming", "foo", "bar").iterator());
+    final Enumerable<String> enumerable2 = Linq4j.asEnumerable(
+        () -> Arrays.asList("ming", "foo", "bar").iterator());
     final EqualityComparer<String> equalityComparer = new EqualityComparer<String>() {
       public boolean equal(String v1, String v2) {
         return !Objects.equals(v1, v2); // reverse the equality.
@@ -2130,14 +1828,10 @@ public class Linq4jTest {
       }
     };
     assertFalse(enumerable1.sequenceEqual(enumerable2, equalityComparer));
+    final Enumerable<String> enumerable3 = Linq4j.asEnumerable(
+        () -> Arrays.asList("fun", "lol", "far").iterator());
     assertTrue(
-        enumerable1.sequenceEqual(
-            Linq4j.asEnumerable(
-                new Iterable<String>() {
-                  public Iterator<String> iterator() {
-                    return Arrays.asList("fun", "lol", "far").iterator();
-                  }
-                }), equalityComparer));
+        enumerable1.sequenceEqual(enumerable3, equalityComparer));
 
     try {
       EnumerableDefaults.sequenceEqual(null, enumerable2);
@@ -2160,21 +1854,12 @@ public class Linq4jTest {
     String s =
         Linq4j.asEnumerable(emps)
             .groupBy(EMP_DEPTNO_SELECTOR)
-            .select(new Function1<Grouping<Integer, Employee>, String>() {
-              public String apply(Grouping<Integer, Employee> group) {
-                return String.format(Locale.ROOT, "%s: %s", group.getKey(),
-                    stringJoin("+", group.select(new Function1<Employee, String>() {
-                      public String apply(Employee element) {
-                        return element.name;
-                      }
-                    })));
-              }
-            })
+            .select(group ->
+                String.format(Locale.ROOT, "%s: %s", group.getKey(),
+                    stringJoin("+", group.select(element -> element.name))))
             .toList()
             .toString();
-    assertEquals(
-        "[10: Fred+Eric+Janet, 30: Bill]",
-        s);
+    assertThat(s, is("[10: Fred+Eric+Janet, 30: Bill]"));
   }
 
   @Test public void testGroupByWithKeySelectorAndComparer() {
@@ -2188,38 +1873,24 @@ public class Linq4jTest {
                 return 0;
               }
             })
-            .select(new Function1<Grouping<Integer, Employee>, String>() {
-              public String apply(Grouping<Integer, Employee> group) {
-                return String.format(Locale.ROOT, "%s: %s", group.getKey(),
-                    stringJoin("+", group.select(new Function1<Employee, String>() {
-                      public String apply(Employee element) {
-                        return element.name;
-                      }
-                    })));
-              }
-            })
+            .select(group ->
+                String.format(Locale.ROOT, "%s: %s", group.getKey(),
+                    stringJoin("+", group.select(element -> element.name))))
             .toList()
             .toString();
-    assertEquals(
-        "[10: Fred+Bill+Eric+Janet]",
-        s);
+    assertThat(s, is("[10: Fred+Bill+Eric+Janet]"));
   }
 
   @Test public void testGroupByWithKeySelectorAndElementSelector() {
     String s =
         Linq4j.asEnumerable(emps)
             .groupBy(EMP_DEPTNO_SELECTOR, EMP_NAME_SELECTOR)
-            .select(new Function1<Grouping<Integer, String>, String>() {
-              public String apply(Grouping<Integer, String> group) {
-                return String.format(Locale.ROOT, "%s: %s", group.getKey(),
-                    stringJoin("+", group));
-              }
-            })
+            .select(group ->
+                String.format(Locale.ROOT, "%s: %s", group.getKey(),
+                    stringJoin("+", group)))
             .toList()
             .toString();
-    assertEquals(
-        "[10: Fred+Eric+Janet, 30: Bill]",
-        s);
+    assertThat(s, is("[10: Fred+Eric+Janet, 30: Bill]"));
   }
 
   /** Equivalent to {@link String}.join, but that method is only in JDK 1.8 and
@@ -2239,20 +1910,18 @@ public class Linq4jTest {
   @Test public void testGroupByWithKeySelectorAndElementSelectorAndComparer() {
     String s =
         Linq4j.asEnumerable(emps)
-            .groupBy(EMP_DEPTNO_SELECTOR, EMP_NAME_SELECTOR,  new EqualityComparer<Integer>() {
-              public boolean equal(Integer v1, Integer v2) {
-                return true;
-              }
-              public int hashCode(Integer integer) {
-                return 0;
-              }
-            })
-            .select(new Function1<Grouping<Integer, String>, String>() {
-              public String apply(Grouping<Integer, String> group) {
-                return String.format(Locale.ROOT, "%s: %s", group.getKey(),
-                    stringJoin("+", group));
-              }
-            })
+            .groupBy(EMP_DEPTNO_SELECTOR, EMP_NAME_SELECTOR,
+                new EqualityComparer<Integer>() {
+                  public boolean equal(Integer v1, Integer v2) {
+                    return true;
+                  }
+                  public int hashCode(Integer integer) {
+                    return 0;
+                  }
+                })
+            .select(group ->
+                String.format(Locale.ROOT, "%s: %s", group.getKey(),
+                    stringJoin("+", group)))
             .toList()
             .toString();
     assertEquals(
@@ -2263,16 +1932,8 @@ public class Linq4jTest {
   @Test public void testGroupByWithKeySelectorAndResultSelector() {
     String s =
         Linq4j.asEnumerable(emps)
-            .groupBy(EMP_DEPTNO_SELECTOR, new Function2<Integer, Enumerable<Employee>, String>() {
-              public String apply(Integer key, Enumerable<Employee> group) {
-                return String.format(Locale.ROOT, "%s: %s", key,
-                    stringJoin("+", group.select(new Function1<Employee, String>() {
-                      public String apply(Employee element) {
-                        return element.name;
-                      }
-                    })));
-              }
-            })
+            .groupBy(EMP_DEPTNO_SELECTOR, (key, group) -> String.format(Locale.ROOT, "%s: %s", key,
+                stringJoin("+", group.select(element -> element.name))))
             .toList()
             .toString();
     assertEquals(
@@ -2283,23 +1944,17 @@ public class Linq4jTest {
   @Test public void testGroupByWithKeySelectorAndResultSelectorAndComparer() {
     String s =
         Linq4j.asEnumerable(emps)
-            .groupBy(EMP_DEPTNO_SELECTOR, new Function2<Integer, Enumerable<Employee>, String>() {
-              public String apply(Integer key, Enumerable<Employee> group) {
-                return String.format(Locale.ROOT, "%s: %s", key,
-                    stringJoin("+", group.select(new Function1<Employee, String>() {
-                      public String apply(Employee element) {
-                        return element.name;
-                      }
-                    })));
-              }
-            }, new EqualityComparer<Integer>() {
-              public boolean equal(Integer v1, Integer v2) {
-                return true;
-              }
-              public int hashCode(Integer integer) {
-                return 0;
-              }
-            })
+            .groupBy(EMP_DEPTNO_SELECTOR,
+                (key, group) -> String.format(Locale.ROOT, "%s: %s", key,
+                    stringJoin("+", group.select(element -> element.name))),
+                new EqualityComparer<Integer>() {
+                  public boolean equal(Integer v1, Integer v2) {
+                    return true;
+                  }
+                  public int hashCode(Integer integer) {
+                    return 0;
+                  }
+                })
             .toList()
             .toString();
     assertEquals(
@@ -2311,12 +1966,8 @@ public class Linq4jTest {
     String s =
         Linq4j.asEnumerable(emps)
             .groupBy(EMP_DEPTNO_SELECTOR, EMP_NAME_SELECTOR,
-                new Function2<Integer, Enumerable<String>, String>() {
-                  public String apply(Integer key, Enumerable<String> group) {
-                    return String.format(Locale.ROOT, "%s: %s", key,
-                        stringJoin("+", group));
-                  }
-                })
+                (key, group) -> String.format(Locale.ROOT, "%s: %s", key,
+                    stringJoin("+", group)))
             .toList()
             .toString();
     assertEquals(
@@ -2328,12 +1979,8 @@ public class Linq4jTest {
     String s =
         Linq4j.asEnumerable(emps)
             .groupBy(EMP_DEPTNO_SELECTOR, EMP_NAME_SELECTOR,
-                new Function2<Integer, Enumerable<String>, String>() {
-                  public String apply(Integer key, Enumerable<String> group) {
-                    return String.format(Locale.ROOT, "%s: %s", key,
-                        stringJoin("+", group));
-                  }
-                },
+                (key, group) -> String.format(Locale.ROOT, "%s: %s", key,
+                    stringJoin("+", group)),
                 new EqualityComparer<Integer>() {
                   public boolean equal(Integer v1, Integer v2) {
                     return true;
@@ -2354,12 +2001,7 @@ public class Linq4jTest {
     final Enumerable<String> e1 = Linq4j.asEnumerable(Arrays.asList("a", "b", "c"));
     final Enumerable<String> e2 = Linq4j.asEnumerable(Arrays.asList("1", "2", "3"));
 
-    final Enumerable<String> zipped = e1.zip(e2,
-        new Function2<String, String, String>() {
-          public String apply(String v0, String v1) {
-            return v0 + v1;
-          }
-        });
+    final Enumerable<String> zipped = e1.zip(e2, (v0, v1) -> v0 + v1);
     assertEquals(3, zipped.count());
     zipped.enumerator().reset();
     for (int i = 0; i < 3; i++) {
@@ -2371,12 +2013,7 @@ public class Linq4jTest {
     final Enumerable<String> e1 = Linq4j.asEnumerable(Arrays.asList("a", "b"));
     final Enumerable<String> e2 = Linq4j.asEnumerable(Arrays.asList("1", "2", "3"));
 
-    final Function2<String, String, String> resultSelector =
-        new Function2<String, String, String>() {
-          public String apply(String v0, String v1) {
-            return v0 + v1;
-          }
-        };
+    final Function2<String, String, String> resultSelector = (v0, v1) -> v0 + v1;
 
     final Enumerable<String> zipped1 = e1.zip(e2, resultSelector);
     assertEquals(2, zipped1.count());
@@ -2530,7 +2167,7 @@ public class Linq4jTest {
   //CHECKSTYLE: IGNORE 1
   public static final Department[] depts = {
       new Department("Sales", 10, Arrays.asList(emps[0], emps[2], emps[3])),
-      new Department("HR", 20, Collections.<Employee>emptyList()),
+      new Department("HR", 20, ImmutableList.of()),
       new Department("Marketing", 30, ImmutableList.of(emps[1])),
   };
 }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java
----------------------------------------------------------------------
diff --git a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java
index 054006b..80bc0e8 100644
--- a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java
+++ b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoEnumerator.java
@@ -79,20 +79,12 @@ class MongoEnumerator implements Enumerator<Object> {
   }
 
   static Function1<Document, Map> mapGetter() {
-    return new Function1<Document, Map>() {
-      public Map apply(Document a0) {
-        return (Map) a0;
-      }
-    };
+    return a0 -> (Map) a0;
   }
 
   static Function1<Document, Object> singletonGetter(final String fieldName,
       final Class fieldClass) {
-    return new Function1<Document, Object>() {
-      public Object apply(Document a0) {
-        return convert(a0.get(fieldName), fieldClass);
-      }
-    };
+    return a0 -> convert(a0.get(fieldName), fieldClass);
   }
 
   /**
@@ -100,16 +92,14 @@ class MongoEnumerator implements Enumerator<Object> {
    */
   static Function1<Document, Object[]> listGetter(
       final List<Map.Entry<String, Class>> fields) {
-    return new Function1<Document, Object[]>() {
-      public Object[] apply(Document a0) {
-        Object[] objects = new Object[fields.size()];
-        for (int i = 0; i < fields.size(); i++) {
-          final Map.Entry<String, Class> field = fields.get(i);
-          final String name = field.getKey();
-          objects[i] = convert(a0.get(name), field.getValue());
-        }
-        return objects;
+    return a0 -> {
+      Object[] objects = new Object[fields.size()];
+      for (int i = 0; i < fields.size(); i++) {
+        final Map.Entry<String, Class> field = fields.get(i);
+        final String name = field.getKey();
+        objects[i] = convert(a0.get(name), field.getValue());
       }
+      return objects;
     };
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoSchema.java
----------------------------------------------------------------------
diff --git a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoSchema.java b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoSchema.java
index b7202ae..db00445 100644
--- a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoSchema.java
+++ b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoSchema.java
@@ -20,9 +20,7 @@ import org.apache.calcite.schema.Table;
 import org.apache.calcite.schema.impl.AbstractSchema;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
-
 import com.mongodb.MongoClient;
 import com.mongodb.MongoClientOptions;
 import com.mongodb.MongoCredential;
@@ -31,6 +29,7 @@ import com.mongodb.client.MongoDatabase;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * Schema mapped onto a directory of MONGO files. Each table in the schema
@@ -67,7 +66,7 @@ public class MongoSchema extends AbstractSchema {
   @VisibleForTesting
   MongoSchema(MongoDatabase mongoDb) {
     super();
-    this.mongoDb = Preconditions.checkNotNull(mongoDb, "mongoDb");
+    this.mongoDb = Objects.requireNonNull(mongoDb, "mongoDb");
   }
 
   @Override protected Map<String, Table> getTableMap() {

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverter.java
----------------------------------------------------------------------
diff --git a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverter.java b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverter.java
index 579c484..53a8668 100644
--- a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverter.java
+++ b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverter.java
@@ -39,7 +39,6 @@ import org.apache.calcite.runtime.Hook;
 import org.apache.calcite.util.BuiltInMethod;
 import org.apache.calcite.util.Pair;
 
-import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 
 import java.util.AbstractList;
@@ -156,12 +155,7 @@ public class MongoToEnumerableConverter
   /** E.g. {@code constantList("x", "y")} returns
    * {@code {ConstantExpression("x"), ConstantExpression("y")}}. */
   private static <T> List<Expression> constantList(List<T> values) {
-    return Lists.transform(values,
-        new Function<T, Expression>() {
-          public Expression apply(T a0) {
-            return Expressions.constant(a0);
-          }
-        });
+    return Lists.transform(values, Expressions::constant);
   }
 }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverterRule.java
----------------------------------------------------------------------
diff --git a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverterRule.java b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverterRule.java
index fb2221e..54295d1 100644
--- a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverterRule.java
+++ b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverterRule.java
@@ -23,7 +23,7 @@ import org.apache.calcite.rel.convert.ConverterRule;
 import org.apache.calcite.rel.core.RelFactories;
 import org.apache.calcite.tools.RelBuilderFactory;
 
-import com.google.common.base.Predicates;
+import java.util.function.Predicate;
 
 /**
  * Rule to convert a relational expression from
@@ -39,7 +39,7 @@ public class MongoToEnumerableConverterRule extends ConverterRule {
    * @param relBuilderFactory Builder for relational expressions
    */
   public MongoToEnumerableConverterRule(RelBuilderFactory relBuilderFactory) {
-    super(RelNode.class, Predicates.<RelNode>alwaysTrue(), MongoRel.CONVENTION,
+    super(RelNode.class, (Predicate<RelNode>) r -> true, MongoRel.CONVENTION,
         EnumerableConvention.INSTANCE, relBuilderFactory,
         "MongoToEnumerableConverterRule");
   }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
----------------------------------------------------------------------
diff --git a/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java b/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
index 4001a8d..b7d4acd 100644
--- a/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
+++ b/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
@@ -21,12 +21,9 @@ import org.apache.calcite.schema.SchemaFactory;
 import org.apache.calcite.schema.SchemaPlus;
 import org.apache.calcite.test.CalciteAssert;
 import org.apache.calcite.test.MongoAssertions;
-
 import org.apache.calcite.util.Bug;
 import org.apache.calcite.util.Util;
 
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
 import com.google.common.io.LineProcessor;
 import com.google.common.io.Resources;
 import com.mongodb.client.MongoCollection;
@@ -39,9 +36,7 @@ import org.bson.BsonDocument;
 import org.bson.BsonInt32;
 import org.bson.BsonString;
 import org.bson.Document;
-
 import org.hamcrest.CoreMatchers;
-
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
@@ -52,7 +47,6 @@ import java.io.IOException;
 import java.io.UncheckedIOException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
-import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.time.Instant;
 import java.time.LocalDate;
@@ -60,6 +54,8 @@ import java.time.ZoneOffset;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
+import java.util.function.Consumer;
 
 /**
  * Testing mongo adapter functionality. By default runs with
@@ -109,7 +105,7 @@ public class MongoAdapterTest implements SchemaFactory {
 
   private static void populate(MongoCollection<Document> collection, URL resource)
       throws IOException {
-    Preconditions.checkNotNull(collection, "collection");
+    Objects.requireNonNull(collection, "collection");
 
     if (collection.count() > 0) {
       // delete any existing documents (run from a clean set)
@@ -146,7 +142,7 @@ public class MongoAdapterTest implements SchemaFactory {
   }
 
   private CalciteAssert.AssertThat assertModel(URL url) {
-    Preconditions.checkNotNull(url, "url");
+    Objects.requireNonNull(url, "url");
     try {
       return assertModel(Resources.toString(url, StandardCharsets.UTF_8));
     } catch (IOException e) {
@@ -724,18 +720,14 @@ public class MongoAdapterTest implements SchemaFactory {
   @Test public void testCountViaInt() {
     assertModel(MODEL)
         .query("select count(*) from zips")
-        .returns(
-            new Function<ResultSet, Void>() {
-              public Void apply(ResultSet input) {
-                try {
-                  Assert.assertThat(input.next(), CoreMatchers.is(true));
-                  Assert.assertThat(input.getInt(1), CoreMatchers.is(ZIPS_SIZE));
-                  return null;
-                } catch (SQLException e) {
-                  throw new RuntimeException(e);
-                }
-              }
-            });
+        .returns(input -> {
+          try {
+            Assert.assertThat(input.next(), CoreMatchers.is(true));
+            Assert.assertThat(input.getInt(1), CoreMatchers.is(ZIPS_SIZE));
+          } catch (SQLException e) {
+            throw new RuntimeException(e);
+          }
+        });
   }
 
   /**
@@ -745,17 +737,14 @@ public class MongoAdapterTest implements SchemaFactory {
    * @param strings Expected expressions
    * @return validation function
    */
-  private static Function<List, Void> mongoChecker(final String... strings) {
-    return new Function<List, Void>() {
-      public Void apply(List actual) {
-        Object[] actualArray =
-            actual == null || actual.isEmpty()
-                ? null
-                : ((List) actual.get(0)).toArray();
-        CalciteAssert.assertArrayEqual("expected MongoDB query not found",
-            strings, actualArray);
-        return null;
-      }
+  private static Consumer<List> mongoChecker(final String... strings) {
+    return actual -> {
+      Object[] actualArray =
+          actual == null || actual.isEmpty()
+              ? null
+              : ((List) actual.get(0)).toArray();
+      CalciteAssert.assertArrayEqual("expected MongoDB query not found",
+          strings, actualArray);
     };
   }
 }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoDatabasePolicy.java
----------------------------------------------------------------------
diff --git a/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoDatabasePolicy.java b/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoDatabasePolicy.java
index 52a0715..f325360 100644
--- a/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoDatabasePolicy.java
+++ b/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoDatabasePolicy.java
@@ -19,14 +19,13 @@ package org.apache.calcite.adapter.mongodb;
 import org.apache.calcite.test.MongoAssertions;
 
 import com.github.fakemongo.Fongo;
-
-import com.google.common.base.Preconditions;
-
 import com.mongodb.MongoClient;
 import com.mongodb.client.MongoDatabase;
 
 import org.junit.rules.ExternalResource;
 
+import java.util.Objects;
+
 /**
  * Instantiates a new connection to Fongo (or Mongo) database depending on the
  * current profile (unit or integration tests).
@@ -46,7 +45,7 @@ class MongoDatabasePolicy extends ExternalResource {
   private final MongoClient client;
 
   private MongoDatabasePolicy(MongoClient client) {
-    this.client = Preconditions.checkNotNull(client, "client");
+    this.client = Objects.requireNonNull(client, "client");
     this.database = client.getDatabase(DB_NAME);
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/mongodb/src/test/java/org/apache/calcite/test/MongoAssertions.java
----------------------------------------------------------------------
diff --git a/mongodb/src/test/java/org/apache/calcite/test/MongoAssertions.java b/mongodb/src/test/java/org/apache/calcite/test/MongoAssertions.java
index 67626c3..4ee63c8 100644
--- a/mongodb/src/test/java/org/apache/calcite/test/MongoAssertions.java
+++ b/mongodb/src/test/java/org/apache/calcite/test/MongoAssertions.java
@@ -18,15 +18,15 @@ package org.apache.calcite.test;
 
 import org.apache.calcite.util.Util;
 
-import com.google.common.base.Function;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Ordering;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Consumer;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.junit.Assert.assertThat;
@@ -47,29 +47,26 @@ public class MongoAssertions {
    * @param lines Expected expressions
    * @return validation function
    */
-  public static Function<ResultSet, Void> checkResultUnordered(
+  public static Consumer<ResultSet> checkResultUnordered(
       final String... lines) {
-    return new Function<ResultSet, Void>() {
-      public Void apply(ResultSet resultSet) {
-        try {
-          final List<String> expectedList =
-              Ordering.natural().immutableSortedCopy(Arrays.asList(lines));
+    return resultSet -> {
+      try {
+        final List<String> expectedList =
+            Ordering.natural().immutableSortedCopy(Arrays.asList(lines));
 
-          final List<String> actualList = Lists.newArrayList();
-          CalciteAssert.toStringList(resultSet, actualList);
-          for (int i = 0; i < actualList.size(); i++) {
-            String s = actualList.get(i);
-            actualList.set(i,
-                s.replaceAll("\\.0;", ";").replaceAll("\\.0$", ""));
-          }
-          Collections.sort(actualList);
-
-          assertThat(Ordering.natural().immutableSortedCopy(actualList),
-              equalTo(expectedList));
-          return null;
-        } catch (SQLException e) {
-          throw new RuntimeException(e);
+        final List<String> actualList = new ArrayList<>();
+        CalciteAssert.toStringList(resultSet, actualList);
+        for (int i = 0; i < actualList.size(); i++) {
+          String s = actualList.get(i);
+          actualList.set(i,
+              s.replaceAll("\\.0;", ";").replaceAll("\\.0$", ""));
         }
+        Collections.sort(actualList);
+
+        assertThat(Ordering.natural().immutableSortedCopy(actualList),
+            equalTo(expectedList));
+      } catch (SQLException e) {
+        throw new RuntimeException(e);
       }
     };
   }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/pig/src/main/java/org/apache/calcite/adapter/pig/PigAggregate.java
----------------------------------------------------------------------
diff --git a/pig/src/main/java/org/apache/calcite/adapter/pig/PigAggregate.java b/pig/src/main/java/org/apache/calcite/adapter/pig/PigAggregate.java
index 6ccbfac..b367fb3 100644
--- a/pig/src/main/java/org/apache/calcite/adapter/pig/PigAggregate.java
+++ b/pig/src/main/java/org/apache/calcite/adapter/pig/PigAggregate.java
@@ -27,8 +27,6 @@ import org.apache.calcite.util.ImmutableBitSet;
 
 import org.apache.pig.scripting.Pig;
 
-import com.google.common.base.Joiner;
-
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -95,8 +93,8 @@ public class PigAggregate extends Aggregate implements PigRel {
       for (int fieldIndex : groupedFieldIndexes) {
         groupedFieldNames.add(allFields.get(fieldIndex).getName());
       }
-      return relAlias + " = GROUP " + relAlias + " BY (" + Joiner.on(", ").join(groupedFieldNames)
-          + ");";
+      return relAlias + " = GROUP " + relAlias + " BY ("
+          + String.join(", ", groupedFieldNames) + ");";
     }
   }
 
@@ -112,7 +110,7 @@ public class PigAggregate extends Aggregate implements PigRel {
     final String generateCall = getPigGenerateCall(implementor);
     final List<String> distinctCalls = getDistinctCalls(implementor);
     return relAlias + " = FOREACH " + relAlias + " {\n"
-        + Joiner.on(";\n").join(distinctCalls) + generateCall + "\n};";
+        + String.join(";\n", distinctCalls) + generateCall + "\n};";
   }
 
   private String getPigGenerateCall(Implementor implementor) {
@@ -130,7 +128,7 @@ public class PigAggregate extends Aggregate implements PigRel {
     List<String> allFields = new ArrayList<>(groupFields.size() + pigAggCalls.size());
     allFields.addAll(groupFields);
     allFields.addAll(pigAggCalls);
-    return "  GENERATE " + Joiner.on(", ").join(allFields) + ';';
+    return "  GENERATE " + String.join(", ", allFields) + ';';
   }
 
   private List<String> getPigAggregateCalls(Implementor implementor) {
@@ -145,7 +143,7 @@ public class PigAggregate extends Aggregate implements PigRel {
   private String getPigAggregateCall(String relAlias, AggregateCall aggCall) {
     final PigAggFunction aggFunc = toPigAggFunc(aggCall);
     final String alias = aggCall.getName();
-    final String fields = Joiner.on(", ").join(getArgNames(relAlias, aggCall));
+    final String fields = String.join(", ", getArgNames(relAlias, aggCall));
     return aggFunc.name() + "(" + fields + ") AS " + alias;
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/pig/src/main/java/org/apache/calcite/adapter/pig/PigFilter.java
----------------------------------------------------------------------
diff --git a/pig/src/main/java/org/apache/calcite/adapter/pig/PigFilter.java b/pig/src/main/java/org/apache/calcite/adapter/pig/PigFilter.java
index 63cc1ea..f3023f6 100644
--- a/pig/src/main/java/org/apache/calcite/adapter/pig/PigFilter.java
+++ b/pig/src/main/java/org/apache/calcite/adapter/pig/PigFilter.java
@@ -27,7 +27,6 @@ import org.apache.calcite.rex.RexInputRef;
 import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.rex.RexNode;
 
-import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 
 import java.util.ArrayList;
@@ -77,7 +76,8 @@ public class PigFilter extends Filter implements PigRel {
     for (RexNode node : RelOptUtil.conjunctions(condition)) {
       filterConditionsConjunction.add(getSingleFilterCondition(implementor, node));
     }
-    String allFilterConditions = Joiner.on(" AND ").join(filterConditionsConjunction);
+    String allFilterConditions =
+        String.join(" AND ", filterConditionsConjunction);
     return relationAlias + " = FILTER " + relationAlias + " BY " + allFilterConditions + ';';
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/pig/src/main/java/org/apache/calcite/adapter/pig/PigRel.java
----------------------------------------------------------------------
diff --git a/pig/src/main/java/org/apache/calcite/adapter/pig/PigRel.java b/pig/src/main/java/org/apache/calcite/adapter/pig/PigRel.java
index 868d3d5..a9073a7 100644
--- a/pig/src/main/java/org/apache/calcite/adapter/pig/PigRel.java
+++ b/pig/src/main/java/org/apache/calcite/adapter/pig/PigRel.java
@@ -19,8 +19,6 @@ package org.apache.calcite.adapter.pig;
 import org.apache.calcite.plan.Convention;
 import org.apache.calcite.rel.RelNode;
 
-import com.google.common.base.Joiner;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -83,7 +81,7 @@ public interface PigRel extends RelNode {
     }
 
     public String getScript() {
-      return Joiner.on("\n").join(statements);
+      return String.join("\n", statements);
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/pig/src/main/java/org/apache/calcite/adapter/pig/PigTableScan.java
----------------------------------------------------------------------
diff --git a/pig/src/main/java/org/apache/calcite/adapter/pig/PigTableScan.java b/pig/src/main/java/org/apache/calcite/adapter/pig/PigTableScan.java
index 95c3536..57fbdd9 100644
--- a/pig/src/main/java/org/apache/calcite/adapter/pig/PigTableScan.java
+++ b/pig/src/main/java/org/apache/calcite/adapter/pig/PigTableScan.java
@@ -29,8 +29,6 @@ import org.apache.calcite.rel.type.RelDataTypeField;
 
 import org.apache.pig.data.DataType;
 
-import com.google.common.base.Joiner;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -65,7 +63,7 @@ public class PigTableScan extends TableScan implements PigRel {
     for (RelDataTypeField f : getTable().getRowType().getFieldList()) {
       fieldNamesAndTypes.add(getConcatenatedFieldNameAndTypeForPigSchema(implementor, f));
     }
-    return Joiner.on(", ").join(fieldNamesAndTypes);
+    return String.join(", ", fieldNamesAndTypes);
   }
 
   private String getConcatenatedFieldNameAndTypeForPigSchema(Implementor implementor,

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/pig/src/test/java/org/apache/calcite/test/PigAdapterTest.java
----------------------------------------------------------------------
diff --git a/pig/src/test/java/org/apache/calcite/test/PigAdapterTest.java b/pig/src/test/java/org/apache/calcite/test/PigAdapterTest.java
index 77ebb18..0bc4544 100644
--- a/pig/src/test/java/org/apache/calcite/test/PigAdapterTest.java
+++ b/pig/src/test/java/org/apache/calcite/test/PigAdapterTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.calcite.test;
 
-import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
 
 import org.junit.Test;
@@ -24,6 +23,7 @@ import org.junit.Test;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.List;
+import java.util.function.Consumer;
 
 import static org.junit.Assert.assertEquals;
 
@@ -170,17 +170,14 @@ public class PigAdapterTest extends AbstractPigTest {
   /** Returns a function that checks that a particular Pig Latin scriptis
    * generated to implement a query. */
   @SuppressWarnings("rawtypes")
-  private static Function<List, Void> pigScriptChecker(final String... strings) {
-    return new Function<List, Void>() {
-      public Void apply(List actual) {
-        String actualArray =
-            actual == null || actual.isEmpty()
-                ? null
-                : (String) actual.get(0);
-        assertEquals("expected Pig script not found",
-            strings[0], actualArray);
-        return null;
-      }
+  private static Consumer<List> pigScriptChecker(final String... strings) {
+    return actual -> {
+      String actualArray =
+          actual == null || actual.isEmpty()
+              ? null
+              : (String) actual.get(0);
+      assertEquals("expected Pig script not found",
+          strings[0], actualArray);
     };
   }
 }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/piglet/src/main/java/org/apache/calcite/piglet/Ast.java
----------------------------------------------------------------------
diff --git a/piglet/src/main/java/org/apache/calcite/piglet/Ast.java b/piglet/src/main/java/org/apache/calcite/piglet/Ast.java
index 5a06ec1..22b1e21 100644
--- a/piglet/src/main/java/org/apache/calcite/piglet/Ast.java
+++ b/piglet/src/main/java/org/apache/calcite/piglet/Ast.java
@@ -23,11 +23,11 @@ import org.apache.calcite.sql.parser.SqlParserUtil;
 import org.apache.calcite.util.Pair;
 import org.apache.calcite.util.Util;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Objects;
 
 /** Abstract syntax tree.
  *
@@ -136,8 +136,8 @@ public class Ast {
     public final SqlParserPos pos;
 
     protected Node(SqlParserPos pos, Op op) {
-      this.op = Preconditions.checkNotNull(op);
-      this.pos = Preconditions.checkNotNull(pos);
+      this.op = Objects.requireNonNull(op);
+      this.pos = Objects.requireNonNull(pos);
     }
   }
 
@@ -154,7 +154,7 @@ public class Ast {
 
     protected Assignment(SqlParserPos pos, Op op, Identifier target) {
       super(pos, op);
-      this.target = Preconditions.checkNotNull(target);
+      this.target = Objects.requireNonNull(target);
     }
   }
 
@@ -164,7 +164,7 @@ public class Ast {
 
     public LoadStmt(SqlParserPos pos, Identifier target, Literal name) {
       super(pos, Op.LOAD, target);
-      this.name = Preconditions.checkNotNull(name);
+      this.name = Objects.requireNonNull(name);
     }
   }
 
@@ -333,7 +333,7 @@ public class Ast {
 
     public DumpStmt(SqlParserPos pos, Identifier relation) {
       super(pos, Op.DUMP);
-      this.relation = Preconditions.checkNotNull(relation);
+      this.relation = Objects.requireNonNull(relation);
     }
   }
 
@@ -343,7 +343,7 @@ public class Ast {
 
     public DescribeStmt(SqlParserPos pos, Identifier relation) {
       super(pos, Op.DESCRIBE);
-      this.relation = Preconditions.checkNotNull(relation);
+      this.relation = Objects.requireNonNull(relation);
     }
   }
 
@@ -353,7 +353,7 @@ public class Ast {
 
     public Literal(SqlParserPos pos, Object value) {
       super(pos, Op.LITERAL);
-      this.value = Preconditions.checkNotNull(value);
+      this.value = Objects.requireNonNull(value);
     }
 
     public static NumericLiteral createExactNumeric(String s,
@@ -408,7 +408,7 @@ public class Ast {
 
     public Identifier(SqlParserPos pos, String value) {
       super(pos, Op.IDENTIFIER);
-      this.value = Preconditions.checkNotNull(value);
+      this.value = Objects.requireNonNull(value);
     }
 
     public boolean isStar() {
@@ -466,8 +466,8 @@ public class Ast {
 
     public FieldSchema(SqlParserPos pos, Identifier id, Type type) {
       super(pos, Op.FIELD_SCHEMA);
-      this.id = Preconditions.checkNotNull(id);
-      this.type = Preconditions.checkNotNull(type);
+      this.id = Objects.requireNonNull(id);
+      this.type = Objects.requireNonNull(type);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/piglet/src/main/javacc/PigletParser.jj
----------------------------------------------------------------------
diff --git a/piglet/src/main/javacc/PigletParser.jj b/piglet/src/main/javacc/PigletParser.jj
index d11b819..ae244d9 100644
--- a/piglet/src/main/javacc/PigletParser.jj
+++ b/piglet/src/main/javacc/PigletParser.jj
@@ -35,10 +35,10 @@ import org.apache.calcite.util.trace.CalciteTrace;
 import org.apache.calcite.util.Pair;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
 
 import org.slf4j.Logger;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.calcite.util.Static.RESOURCE;
@@ -161,7 +161,7 @@ JAVACODE SqlParseException convertException(Throwable ex) {
  */
 Program stmtListEof() :
 {
-  final List<Stmt> list = Lists.newArrayList();
+  final List<Stmt> list = new ArrayList<Stmt>();
   Stmt s;
 }
 {
@@ -326,7 +326,7 @@ Assignment foreachStmt(final Identifier target) :
 List<Stmt> nestedStmtList() :
 {
   Assignment s;
-  final List<Stmt> list = Lists.newArrayList();
+  final List<Stmt> list = new ArrayList<Stmt>();
 }
 {
   s = nestedStmt() {
@@ -388,7 +388,8 @@ OrderStmt orderStmt(final Identifier target) :
 
 List<Pair<Identifier, Direction>> orderFieldCommaList() :
 {
-  final List<Pair<Identifier, Direction>> list = Lists.newArrayList();
+  final List<Pair<Identifier, Direction>> list =
+      new ArrayList<Pair<Identifier, Direction>>();
   Pair<Identifier, Direction> field;
 }
 {
@@ -730,7 +731,7 @@ Node atom() :
 /** A non-empty list of expressions. */
 List<Node> expCommaList() :
 {
-  final List<Node> list = Lists.newArrayList();
+  final List<Node> list = new ArrayList<Node>();
   Node e;
 }
 {
@@ -1045,7 +1046,7 @@ String commonNonReservedKeyWord() :
  *****************************************/
 
 TOKEN_MGR_DECLS : {
-    List<Integer> lexicalStateStack = Lists.newArrayList();
+    List<Integer> lexicalStateStack = new ArrayList<Integer>();
 
     void pushState() {
       lexicalStateStack.add(curLexState);

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/piglet/src/test/java/org/apache/calcite/test/Fluent.java
----------------------------------------------------------------------
diff --git a/piglet/src/test/java/org/apache/calcite/test/Fluent.java b/piglet/src/test/java/org/apache/calcite/test/Fluent.java
index 7afd781..fc65939 100644
--- a/piglet/src/test/java/org/apache/calcite/test/Fluent.java
+++ b/piglet/src/test/java/org/apache/calcite/test/Fluent.java
@@ -24,7 +24,6 @@ import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.tools.PigRelBuilder;
 import org.apache.calcite.util.Util;
 
-import com.google.common.base.Function;
 import com.google.common.collect.Ordering;
 
 import java.io.StringReader;
@@ -32,6 +31,7 @@ import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.function.Function;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
@@ -59,39 +59,33 @@ class Fluent {
 
   public Fluent returns(final String out)
       throws ParseException {
-    return returns(
-        new Function<String, Void>() {
-          public Void apply(String s) {
-            assertThat(s, is(out));
-            return null;
-          }
-        });
+    return returns(s -> {
+      assertThat(s, is(out));
+      return null;
+    });
   }
 
   public Fluent returnsUnordered(String... lines) throws ParseException {
     final List<String> expectedLines =
         Ordering.natural().immutableSortedCopy(Arrays.asList(lines));
-    return returns(
-        new Function<String, Void>() {
-          public Void apply(String s) {
-            final List<String> actualLines = new ArrayList<>();
-            for (;;) {
-              int i = s.indexOf('\n');
-              if (i < 0) {
-                if (!s.isEmpty()) {
-                  actualLines.add(s);
-                }
-                break;
-              } else {
-                actualLines.add(s.substring(0, i));
-                s = s.substring(i + 1);
-              }
-            }
-            assertThat(Ordering.natural().sortedCopy(actualLines),
-                is(expectedLines));
-            return null;
+    return returns(s -> {
+      final List<String> actualLines = new ArrayList<>();
+      for (;;) {
+        int i = s.indexOf('\n');
+        if (i < 0) {
+          if (!s.isEmpty()) {
+            actualLines.add(s);
           }
-        });
+          break;
+        } else {
+          actualLines.add(s.substring(0, i));
+          s = s.substring(i + 1);
+        }
+      }
+      assertThat(Ordering.natural().sortedCopy(actualLines),
+          is(expectedLines));
+      return null;
+    });
   }
 
   public Fluent returns(Function<String, Void> checker) throws ParseException {

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/plus/src/main/java/org/apache/calcite/adapter/os/DuTableFunction.java
----------------------------------------------------------------------
diff --git a/plus/src/main/java/org/apache/calcite/adapter/os/DuTableFunction.java b/plus/src/main/java/org/apache/calcite/adapter/os/DuTableFunction.java
index 336f5fa..ede8c97 100644
--- a/plus/src/main/java/org/apache/calcite/adapter/os/DuTableFunction.java
+++ b/plus/src/main/java/org/apache/calcite/adapter/os/DuTableFunction.java
@@ -19,7 +19,6 @@ package org.apache.calcite.adapter.os;
 import org.apache.calcite.DataContext;
 import org.apache.calcite.config.CalciteConnectionConfig;
 import org.apache.calcite.linq4j.Enumerable;
-import org.apache.calcite.linq4j.function.Function1;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.schema.ScannableTable;
@@ -44,11 +43,9 @@ public class DuTableFunction {
     return new ScannableTable() {
       public Enumerable<Object[]> scan(DataContext root) {
         return Processes.processLines("du", "-ak")
-            .select(new Function1<String, Object[]>() {
-              public Object[] apply(String a0) {
-                final String[] fields = a0.split("\t");
-                return new Object[] {Long.valueOf(fields[0]), fields[1]};
-              }
+            .select(a0 -> {
+              final String[] fields = a0.split("\t");
+              return new Object[] {Long.valueOf(fields[0]), fields[1]};
             });
       }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/plus/src/main/java/org/apache/calcite/adapter/os/Processes.java
----------------------------------------------------------------------
diff --git a/plus/src/main/java/org/apache/calcite/adapter/os/Processes.java b/plus/src/main/java/org/apache/calcite/adapter/os/Processes.java
index 8caa7c3..18aa514 100644
--- a/plus/src/main/java/org/apache/calcite/adapter/os/Processes.java
+++ b/plus/src/main/java/org/apache/calcite/adapter/os/Processes.java
@@ -20,8 +20,6 @@ import org.apache.calcite.linq4j.AbstractEnumerable;
 import org.apache.calcite.linq4j.Enumerable;
 import org.apache.calcite.linq4j.Enumerator;
 
-import com.google.common.base.Supplier;
-
 import java.io.BufferedInputStream;
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -29,6 +27,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
+import java.util.function.Supplier;
 
 /**
  * Utilities regarding operating system processes.

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/plus/src/main/java/org/apache/calcite/adapter/os/SqlShell.java
----------------------------------------------------------------------
diff --git a/plus/src/main/java/org/apache/calcite/adapter/os/SqlShell.java b/plus/src/main/java/org/apache/calcite/adapter/os/SqlShell.java
index 6cdbfab..92da79f 100644
--- a/plus/src/main/java/org/apache/calcite/adapter/os/SqlShell.java
+++ b/plus/src/main/java/org/apache/calcite/adapter/os/SqlShell.java
@@ -20,8 +20,6 @@ import org.apache.calcite.linq4j.Enumerator;
 import org.apache.calcite.linq4j.Linq4j;
 import org.apache.calcite.util.JsonBuilder;
 
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Maps;
 
@@ -41,6 +39,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -58,9 +57,9 @@ public class SqlShell {
   SqlShell(InputStreamReader in, PrintWriter out,
       PrintWriter err, String... args) {
     this.args = ImmutableList.copyOf(args);
-    this.in = Preconditions.checkNotNull(in);
-    this.out = Preconditions.checkNotNull(out);
-    this.err = Preconditions.checkNotNull(err);
+    this.in = Objects.requireNonNull(in);
+    this.out = Objects.requireNonNull(out);
+    this.err = Objects.requireNonNull(err);
   }
 
   private static String model() {
@@ -286,32 +285,30 @@ public class SqlShell {
             out.println(",");
           }
           json.append(b, 0,
-              Maps.asMap(fields, new Function<String, Object>() {
-                public Object apply(String columnLabel) {
-                  try {
-                    final int i = fieldOrdinals.get(columnLabel);
-                    switch (m.getColumnType(i)) {
-                    case Types.BOOLEAN:
-                      final boolean b = r.getBoolean(i);
-                      return !b && r.wasNull() ? null : b;
-                    case Types.DECIMAL:
-                    case Types.FLOAT:
-                    case Types.REAL:
-                    case Types.DOUBLE:
-                      final double d = r.getDouble(i);
-                      return d == 0D && r.wasNull() ? null : d;
-                    case Types.BIGINT:
-                    case Types.INTEGER:
-                    case Types.SMALLINT:
-                    case Types.TINYINT:
-                      final long v = r.getLong(i);
-                      return v == 0L && r.wasNull() ? null : v;
-                    default:
-                      return r.getString(i);
-                    }
-                  } catch (SQLException e) {
-                    throw new RuntimeException(e);
+              Maps.asMap(fields, columnLabel -> {
+                try {
+                  final int i1 = fieldOrdinals.get(columnLabel);
+                  switch (m.getColumnType(i1)) {
+                  case Types.BOOLEAN:
+                    final boolean b1 = r.getBoolean(i1);
+                    return !b1 && r.wasNull() ? null : b1;
+                  case Types.DECIMAL:
+                  case Types.FLOAT:
+                  case Types.REAL:
+                  case Types.DOUBLE:
+                    final double d = r.getDouble(i1);
+                    return d == 0D && r.wasNull() ? null : d;
+                  case Types.BIGINT:
+                  case Types.INTEGER:
+                  case Types.SMALLINT:
+                  case Types.TINYINT:
+                    final long v = r.getLong(i1);
+                    return v == 0L && r.wasNull() ? null : v;
+                  default:
+                    return r.getString(i1);
                   }
+                } catch (SQLException e) {
+                  throw new RuntimeException(e);
                 }
               }));
           out.append(b);

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/plus/src/main/java/org/apache/calcite/adapter/tpcds/TpcdsSchema.java
----------------------------------------------------------------------
diff --git a/plus/src/main/java/org/apache/calcite/adapter/tpcds/TpcdsSchema.java b/plus/src/main/java/org/apache/calcite/adapter/tpcds/TpcdsSchema.java
index e18ba84..618324e 100644
--- a/plus/src/main/java/org/apache/calcite/adapter/tpcds/TpcdsSchema.java
+++ b/plus/src/main/java/org/apache/calcite/adapter/tpcds/TpcdsSchema.java
@@ -30,8 +30,8 @@ import org.apache.calcite.schema.Table;
 import org.apache.calcite.schema.impl.AbstractSchema;
 import org.apache.calcite.schema.impl.AbstractTableQueryable;
 import org.apache.calcite.util.Bug;
-import org.apache.calcite.util.ImmutableBitSet;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
 import net.hydromatic.tpcds.TpcdsColumn;
@@ -39,7 +39,6 @@ import net.hydromatic.tpcds.TpcdsEntity;
 import net.hydromatic.tpcds.TpcdsTable;
 
 import java.sql.Date;
-import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -115,7 +114,7 @@ public class TpcdsSchema extends AbstractSchema {
       Bug.upgrade("add row count estimate to TpcdsTable, and use it");
       Integer rowCount = TABLE_ROW_COUNTS.get(tpcdsTable.name);
       assert rowCount != null : tpcdsTable.name;
-      return Statistics.of(rowCount, Collections.<ImmutableBitSet>emptyList());
+      return Statistics.of(rowCount, ImmutableList.of());
     }
 
     public <T> Queryable<T> asQueryable(final QueryProvider queryProvider,